我们正在使用Handsontable在Javascript中构建一个表格,其中包含货币金额。我们让用户可以选择在金额上显示两位小数或不显示小数位(这是客户的要求)。然后我们会发现如下情况:
经过一番调查,我们发现Javascript中基本的四舍五入函数
尽管如此,我们仍希望找到更好的解决办法。那么,最佳、最优雅的方法是什么(不需要修改原始数值)?请注意,我们不直接调用
Column A Column B Column C = A + B
-------------------------------------------
-273.50 273.50 0 Two decimals
-273 274 0 No decimals
经过一番调查,我们发现Javascript中基本的四舍五入函数
Math.round()
的运作方式如下:
由于我们正在处理货币金额,我们不关心第二个小数点之后发生了什么,所以我们选择在表格中的任何负值上添加-0.0000001。 因此,当使用两个或没有小数渲染值时,我们现在获得正确的结果,例如如果小数部分恰好为0.5,则将参数向+∞的方向舍入到下一个整数。请注意,这与许多其他语言的
round()
函数不同,后者通常将此情况向远离零的下一个整数舍入(在负数且小数部分恰好为0.5的情况下会产生不同的结果)。
Math.round(-273.5000001)
= -274,而Math.round(-273.4900001)
仍然是-273。尽管如此,我们仍希望找到更好的解决办法。那么,最佳、最优雅的方法是什么(不需要修改原始数值)?请注意,我们不直接调用
Math.round(x)
,而是告诉Handsontable使用给定数量的小数位数格式化值。
var rounded = (val < 0) ? Math.round(val - 0.5) : Math.round(val+0.5);
- Taha Paksu[33, 2.3, 53.34].map(x=>x.toFixed(2)).join(", ") == "33.00, 2.30, 53.34"
thus all you need is.toFixed(2)
- dandavis