我正在寫一個函數,我需要讀取一個包含浮點數的字符串並將其返回給Rational。但是當我做toRational (read input :: Double)
,也不會轉例如:0.9
到9 % 10
如預期,而是81%...... 9007 ...... THXDouble和Rational Number的問題
3
A
回答
10
這是正確的行爲。數字0.9
不能表示爲Double
,不在Haskell,C或Java中。這是因爲Double
和Float
使用基數2:它們只能精確地表示二元分數的某個子集。
爲了得到你想要的行爲,導入Numeric
模塊,並使用readFloat
功能。界面非常不穩定(它使用ReadS
類型),所以你必須包裝一點。這裏是你如何使用它:
import Numeric
myReadFloat :: String -> Rational -- type signature is necessary here
myReadFloat str =
case readFloat str of
((n, []):_) -> n
_ -> error "Invalid number"
而且,結果是:
> myReadFloat "0.9"
9 % 10
1
二進制浮點數字不能精確代表所有的數字,基地-10可以。你看到0.9的數字不是,恰好是 0.9,但它非常接近它。不要在需要小數精度的情況下使用浮點類型 - 他們只是無法做到這一點。
相關問題
- 1. Double到Number
- 2. Double/Float TO Rational(X/Y Form)
- 3. C - long double和printf問題
- 4. DataGridView RowFilter double和CurrentCultureInfo問題
- 5. Assert Equals(double,double,delta)問題
- 6. 的Java double [] []問題
- 7. String和Double非常奇怪的問題
- 8. int和double的重載問題
- 9. Double-Signing .apk // SHA1和其他問題
- 10. 堆棧推送問題Double和Character
- 11. Magic Number問題的解決方案......?
- 12. jtable number column format 12.345.678,98 for new Double(12345678.98)
- 13. 重載問題*運算符爲double * obj和obj * double
- 14. double free()有什麼問題?
- 15. C#double,小數問題
- 16. C++ Mastermind Double White Peg問題
- 17. Hadoop Hive DOUBLE類型問題
- 18. Double googlemap穩定性問題
- 19. jQuery double dropdown導航問題
- 20. 安裝Rational Team Concert和Rational Insight
- 21. 訪問控制:Rational ClearCase的
- 22. Javascript Prime Number功能控制檯問題
- 23. 語義問題對二進制表達式的操作數無效('double'和'double')
- 24. Trunc(number)和round(number)之間的區別
- 25. Java重載:Number,Number; INT,雙
- 26. 關於變量類型「double」的問題
- 27. Double and Single的依賴屬性問題
- 28. 子類中的double值問題
- 29. 在C++中執行long double的問題
- 30. 顯示Java double的JSP問題
有沒有正確處理負數的版本? – Martijn 2011-05-17 10:08:35
如果要處理負數,請使用「readSigned readFloat」。 – Martijn 2011-05-17 10:14:29