我写了一系列业务应用程序。我想使用Javascript构建一个前端,并试图找出如何处理,对于业务用户来说,是浮点错误(我从计算机科学的角度理解它们可能不被视为错误)。我已经阅读了很多内容,并看到了所有类似的圆形黑客,这些黑客在给出的例子上工作,但看起来容易出乎意料地崩溃。有没有明确的方法在javascript中进行十进制数学运算?
答案 0 :(得分:6)
根据道格拉斯·克罗克福德的说法,解决这个问题的唯一方法是将你的值扩展为整数。通过在缩放值上使用Math.round
确保它确实是整数。 (DC没有谈到舍入部分,但我发现它是必要的。例如Math.round(1.1 *100))
做计算。当你完成数学比例回到原始精度。参见 JavaScript:The Good零件“浮点”部分。
答案 1 :(得分:1)
一个答案是用十进制而不是二进制来进行数学运算。然后你永远不必担心小数< =>二进制转换错误。您将数字表示为数组或字符串中的二进制数字,并自行编写数学例程。
如果您不想遇到麻烦,可以查看以下一些bignumber库:
答案 2 :(得分:0)
唯一确定的解决方案似乎是在内部编写自己的任意精度数字类型 - 这将是复杂且非常慢的。