Điều chỉnh câu trả lời phổ biến nhất của Brann thành MySQL cho những người đến như tôi.
CREATE FUNCTION `sfround`(num FLOAT, sf INT) # creates the function
RETURNS float # defines output type
DETERMINISTIC# given input, will return same output
BEGIN
DECLARE r FLOAT; # make a variable called r, defined as a float
IF(num IS NULL OR num = 0) THEN # ensure the number exists, and isn't 0
SET r = num; # if it is; leave alone
ELSE
SET r = ROUND(num, sf - 1 - FLOOR(LOG10(ABS(num))));
/* see below*/
END IF;
RETURN (r);
END
/* Felt quá lâu để đưa vào comment */
ROUND (num, sf - 1 - FLOOR (LOG10 (ABS (num))))
- Phần rằng tác phẩm - sử dụng hàm ROUND trên số như bình thường, nhưng độ dài được làm tròn thành được tính là
- ABS đảm bảo tích cực
- LOG10 nhận số chữ số lớn hơn 0 trong số
- SÀN nhận được số nguyên lớn nhất nhỏ hơn so với số lượng kết quả
- Vì vậy, luôn làm tròn xuống và đưa ra một số nguyên
- sf - 1 - FLOOR (...) đưa ra một số âm
công trình vì ROUND (num, num-ve) làm tròn đến bên trái của dấu thập phân
Đối với chỉ một off, ROUND (123,456, -1) và ROUND (0.00123,4) trả lại câu trả lời yêu cầu ((120, 0.0012)
Nguồn
2016-07-20 09:39:12
Điều đó hoạt động tốt và đơn giản hơn nhiều so với những gì tôi đã đưa ra :-) – Paul
Mặc dù phải đảm bảo @number không phải là 0 – Paul
thực sự; cập nhật cho phù hợp. – Brann