如何在MySQL中舍入到最接近的整数?


83

如何在MySQL中四舍五入到最接近的整数?

例: 12345.7344 rounds to 12345

mysql的round()功能四舍五入。

我不知道值和小数位将是多长时间,可能是10位数字和4位小数,可能是2位数字和7位小数。


您的示例未舍入到最接近的整数!
帕特里克·奥诺涅兹

1
@PatrickHonorez您的评论是关于一个5岁的问题,似乎对这个问题有误解。OP要求一个函数将DOWN舍入到最接近的整数。
沃伦·塞金特

@WarrenSergent的确是:-/
帕特里克·奥诺涅兹

Answers:


117

使用FLOOR

SELECT FLOOR(your_field) FROM your_table

谢谢。在我阅读关于round()的整个过程中,它一直盯着我。
d -_- b

好的,我删除了该注释,我做了尝试,当FLOOR()2个子查询之间的差异(子查询差异为-70.00)时返回0 ……以前见过吗?
斯蒂芬,

44

如果要将小数舍入到较低的整数,请使用FLOOR()。例子:

FLOOR(1.9) => 1
FLOOR(1.1) => 1

如果要将小数点四舍五入到最接近的整数,请使用ROUND()。例子:

ROUND(1.9) => 2
ROUND(1.1) => 1

如果要将小数舍入到高位整数,请使用CEIL()。例子:

CEIL(1.9) => 2
CEIL(1.1) => 2


3

SUBSTR将比FLOOR某些情况下更好,因为FLOOR具有如下“错误”:

SELECT 25 * 9.54 + 0.5 -> 239.00

SELECT FLOOR(25 * 9.54 + 0.5) -> 238  (oops!)

SELECT SUBSTR((25*9.54+0.5),1,LOCATE('.',(25*9.54+0.5)) - 1) -> 239

2
我只是在MySQL上40年6月5日测试SELECT FLOOR(25 * 9.54 + 0.5),并返回239
冬季母龙

1

可以通过以下两种方式完成此操作:

  • select floor(desired_field_value) from table
  • select round(desired_field_value-0.5) from table

第二种解释:假设12345.7344整数。因此,12345.7344-0.5 = 12345.2344,四舍五入的结果将是12345。



0

如果您需要小数点可以使用此

DECLARE @Num NUMERIC(18, 7) = 19.1471985
SELECT FLOOR(@Num * 10000) / 10000

输出:19.147100清除:985添加:00

或使用此:

SELECT SUBSTRING(CONVERT(VARCHAR, @Num), 1, CHARINDEX('.', @Num) + 4)

输出:19.1471清除:985

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.