任意精度JavaScript上的浮点数

时间:2010-01-21 11:18:43

标签: gwt floating-point javascript

我的网站上有一些输入表示最多十位精度数字(十进制)的浮点数。在某些时候,在客户端验证代码中,我需要比较其中的几个值以查看它们是否相等,并且在这里,正如您所期望的那样,IEEE754的内在函数使得简单的检查失败了(如( 2.0000000000 == 2.0000000001)= true。

我可以在点的每一侧打破两个长点的浮点数,使每一边长64位并手动进行比较,但它看起来很难看!

任何体面的Javascript库来处理Javascript上的任意(或至少保证)精度浮点数?

提前致谢!

PS:基于GWT的解决方案有一个++

2 个答案:

答案 0 :(得分:1)

http://code.google.com/p/gwt-math/有一个GWT-MAT​​H库。

但是,我警告你,这是java.BigDecimal的java-> javascript自动转换的GWT jsni叠加(实际上是旧的com.ibm.math.BigDecimal)。

它有效,但速度不快。 (也不精益。它会在你的项目中填上70k)。

在我的工作场所,我们正在研究一个简单的十进制小数点,但没有什么值得发布的。 :(

答案 1 :(得分:1)

使用任意精度整数库,例如silentmatt’s javascript-biginteger,它可以使用任意大小的整数进行存储和计算。

由于您需要十位小数,因此您需要将值n存储为n×10^10。例如,将1存储为10000000000(十个零),将1.5存储为15000000000(九个零),等等。要向用户显示值,只需输入小数指向第十个最后一个字符的前面(然后如果你想要,则截断任何尾随的零)。

或者你可以将分子和分母存储为大整数,这样就可以得到任意精确的小数值(但要注意 - 小数值往往会很快变大)。