在Javascript中从零开始四舍五入

时间:2017-04-07 08:16:45

标签: javascript math rounding handsontable

我们正在Javascript中构建一个表,其中Handsontable表示货币金额。我们为用户提供了使用两位小数或无小数位来呈现金额的可能性(这是客户的要求)。然后我们发现这样的事情:

Column A     Column B      Column C = A + B
-------------------------------------------
-273.50       273.50       0                 Two decimals
-273          274          0                 No decimals

稍微研究一下,我们发现Javascript中的基本舍入函数,Math.round()works like this

  

如果小数部分恰好为0.5,则参数将四舍五入为+∞方向的下一个整数。 请注意,这与许多语言的round()函数不同,这些函数通常将此情况舍入到下一个远离零的整数,而不是(在此处给出不同的结果负数的情况,其中小数部分恰好为0.5)。

由于我们正在处理货币金额,因此我们不关心小数点后第二位后发生的情况,因此我们选择将-0.0000001添加到表中的任何负值。因此,当渲染具有两个或没有小数的值时,现在我们得到了正确的结果,因为Math.round(-273.5000001) = -274,而Math.round(-273.4900001)仍然是-273。

尽管如此,我们希望找到一个更好的解决方案来解决这个问题。那么实现这一目标的最佳,最优雅的方法是什么(不需要修改原始数值)?请注意,我们不直接调用Math.round(x),我们只是告诉Handsontable格式化具有给定小数位数的值。

1 个答案:

答案 0 :(得分:-1)

正如@dandavis在评论中指出的那样,处理此问题的最佳方法是使用.toFixed(2)代替Math.round()

正如你所指出的那样,

Math.round()向上舍入了一半。

.toFixed()将从零开始一半。我们在那里指定2来表示在进行舍入时使用的小数位数。