2010-01-21 128 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,然後可以讓你任意精確的分數值(但要小心 - 小數值會變得非常快)。