【问题标题】:MySQL - How can I always round up decimals?MySQL - 我怎样才能总是四舍五入?
【发布时间】:2011-12-04 01:38:23
【问题描述】:

例如我有以下值:

0.000018

这是小数点后 6 位,但我想将其四舍五入到最接近的整数第 4 位小数,这样:

0.000018 -> 0.0001

我玩过 round() 函数,但如果我只是使用 round 函数:

round(0.000018,4) = 0.0000

在出于财务目的处理小数时,在这种情况下,需要四舍五入并向客户收费,而不是给他们免费赠品!但是round() 会根据价值向上或向下取整,我需要不断向上取整。

有简单的方法吗?

【问题讨论】:

  • 我无法理解你期望的 round(0.000018) 是 0.0002?
  • 他没有,因为回合上升或下降。这就是为什么有一个问题:)
  • 对不起,错字了...我的意思是 0.0001。已在原始问题中更正。

标签: mysql rounding


【解决方案1】:

您可以使用ceil (ceiling)。它只是四舍五入,所以你必须乘以 10000,做 ceil,然后再除以结果。

所以ceil(0.000145* 10000) = ceil(1.45) = 2 分回来,你会得到0.0002

编辑:等等,wut?那是行不通的。我的意思是FLOOR 显然但是工作是一样的:D 手册也在同一页上:)

所以floor(0.000145* 10000) = floor(1.45) = 1 分回来,你会得到0.0001

【讨论】:

  • 谢谢,认为 ceil() 是这里的答案: ceil(0.000001*10000)/10000 = 0.0001 ceil(0.000011*10000)/10000 = 0.0001 ceil(0.000111*10000)/10000 = 0.000 (0.000200*10000)/10000 = 0.0002 细胞(0.000201*10000)/10000 = 0.0003
【解决方案2】:

还有另一种方法,就是将 10 的一半相加。例如:round(x+0.005, 2) 其中 x 为 0.923 = 0.93,这样可以减少最大浮点除法误差。

【讨论】:

  • MySQL 的回合对于不精确的数字有相当不确定的行为:dev.mysql.com/doc/refman/5.7/en/…(对于近似值数字,结果取决于 C 库)
  • 当值为x.00时会出错,会四舍五入到x.01。
【解决方案3】:

使用ROUND(X,D),它将值 X 舍入到 D 小数位。

【讨论】:

  • 这不会按照 OP 的要求四舍五入。 ROUND(1.11,1) 将转到 1.1 而不是 1.2
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-09-08
  • 2022-01-09
  • 1970-01-01
  • 2017-12-26
  • 1970-01-01
  • 1970-01-01
  • 2016-09-07
相关资源
最近更新 更多