2010-01-21 82 views
5

我在我的网站上有一些输入,代表了浮点数,最多有十个精度位(十进制)。在某些情况下,在客户端验证代码中,我需要比较其中的一些值来确定它们是否相等,并且在这里,如您所期望的那样,IEEE754的内在特性使得这种简单的检查失败, 2.0000000000 == 2.0000000001)= true。任意精度JavaScript上的浮点数

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

任何像样的Javascript库来处理任意(或至少保证)的Javascript精度浮点数字?

在此先感谢!

PS:一个基于GWT溶液具有++

+0

此问题可能出现在任何任意精度浮点上,否则您设置相等的精度。这是浮点数的内在本质。 使用任意长度的定点数学。 – kirilloid 2010-01-21 20:05:50

+0

@ kirilloid当然可能会出现,只是认为它值得详细说明问题(通常导致更详细的答案)。不管怎么说,还是要谢谢你! – opsidao 2010-01-21 20:25:13

回答

1

有一个在http://code.google.com/p/gwt-math/的GWT-数学库。但是,我警告你,它是一个java-> javascript自动转换java.BigDecimal(实际上是旧的com.ibm.math.BigDecimal)的GWT jsni覆盖。

它的工作原理,但很快它不是。 (不是精益,它会在你的项目中保持良好的70k)。

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

+1

看起来很有希望!谢谢! (我认为性能不会是一个问题,仅仅用于验证,真正的数学是在使用R的服务器上完成的;)) – opsidao 2010-01-21 20:27:24

1

既然你想10位小数使用任意精度的整数库如silentmatt’s javascript-biginteger,它可以存储和使用任意大小的整数计算。

,你需要的价值n存储为n×10^10 。例如,将1作为10000000000(10个零),1.5作为15000000000(9个零)等等来存储。为了向用户显示该值,只需在第十个最后一个字符前面放置一个小数点(然后切断任何如果你愿意,可以追踪零)

或者你也可以可以存储一个分子和分母作为bigintegers,然后可以让你任意精确的分数值(但要小心 - 小数值会变得非常快)。