在我的角度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类型。
答案 0 :(得分:3)
在处理货币时,您可以做的最糟糕的事情是使用浮点数,如您所见。由于存储浮点的方式,某些操作可能会提供不正确的结果。只有总是正确的是乘以10除以幂。
最好的方法是将货币存储为Integer / BigInteger,或者其他任何东西,并将其保存为例如4位小数,因此12100应代表1.21
然后你可以做整数的减法/乘法,最后除以10的幂。
我的建议是,在任何操作之前将这些数字转换为整数,然后将其分成浮动。
答案 1 :(得分:1)
之前已经讨论过Javascript中的浮点精度(例如here或here)。您有以下选择:
.toFixed(2)
在所有这些中,我同意@PerunSS,在您的情况下,最好的选择是在任何操作之前将数字转换为整数,并将它们转换回来。