Angular JS两个十进制数的不准确减法

时间:2016-08-08 08:08:52

标签: javascript angularjs

在我的角度JS应用程序中,我在一个对象中有三个量。在Chrome浏览器调试器中,我有以下内容:

payment.amountForClosing = payment.amountRemaining - payment.amountReserved;

payment.amountRemaining的值为3026.2

payment.amountReserved的值为2478.4

减去payment.amountForClosing后的

值为547.7999999999997,显示为547.8。 当用户尝试关闭另一笔付款时,我的验证逻辑会返回一个错误,表明由于上述状态,没有足够的资金来支付付款。

这些数值来自C#WebApi 2.0后端,作为System.Decimal类型。

2 个答案:

答案 0 :(得分:3)

在处理货币时,您可以做的最糟糕的事情是使用浮点数,如您所见。由于存储浮点的方式,某些操作可能会提供不正确的结果。只有总是正确的是乘以10除以幂。

最好的方法是将货币存储为Integer / BigInteger,或者其他任何东西,并将其保存为例如4位小数,因此12100应代表1.21

然后你可以做整数的减法/乘法,最后除以10的幂。

我的建议是,在任何操作之前将这些数字转换为整数,然后将其分成浮动。

答案 1 :(得分:1)

之前已经讨论过Javascript中的浮点精度(例如herehere)。您有以下选择:

  1. 将所有数字转换为整数。
  2. 使用.toFixed(2)
  3. 将结果格式化为固定的有效位数
  4. BigDecimal
  5. 等小数使用特殊数据类型

    在所有这些中,我同意@PerunSS,在您的情况下,最好的选择是在任何操作之前将数字转换为整数,并将它们转换回来。