【发布时间】:2012-09-27 21:42:06
【问题描述】:
对于四舍五入的小数(价格),我使用 .toFixed(2) 已经有一段时间了。但我最近才发现 Javascript 不能“精确”四舍五入。我有点震惊,即使 10.005 也无法正确四舍五入到 10.01。它刚刚四舍五入到 10.00。其他时候它确实正确地四舍五入。我喜欢控制我的代码,所以这对我来说是一个很大的禁忌。
由于我正在计算价格,我认为我需要更准确的 (100%) 数据来舍入 2 位或 3 位小数,也许是 4 位小数。
在javascript中进行基本舍入没有直接的方法,正确的方法吗?
更新:正如 Felix Kling 所建议的,将我的价格处理为美分整数的方法,也有缺点(除了更多代码)?
【问题讨论】:
-
不要使用浮点值来赚钱。最简单的(imo)解决方案是以美分(或您使用的任何货币)计算价格,并根据您的需要(例如美元和美分)格式化值。这样可以避免舍入错误。
-
以美分为单位??必须查找那个!
-
顺便说一句,你确定是
10.005没有正确舍入,而不是像10 * 1.0005这样的东西吗? -
@alex 确实,这是因为二进制处理,我在某处读过。
-
其他语言,比如Java,都有
Decimal这个数据类型,但是这种东西在JS原生是不存在的。另见:Precise Financial Calculation in JavaScript. What Are the Gotchas?.
标签: javascript jquery