我的工作哈斯克爾解析,我想分析這樣解析和讀取浮點值在Haskell
946685561.618847
我沒有問題,認識到(解析)表示的時間戳值它,但我的問題是關於結果的類型。我想到兩種情況:
- Haskell中是否存在小數類型,以便結果可以與小數值相關聯?
- 如果不是這種情況,那麼如何存儲這個值,因爲
Int
範圍從-2 至2 - 1?
我的工作哈斯克爾解析,我想分析這樣解析和讀取浮點值在Haskell
946685561.618847
我沒有問題,認識到(解析)表示的時間戳值它,但我的問題是關於結果的類型。我想到兩種情況:
Int
範圍從-2 至2 - 1?實際上有多種小數類型 - 甚至有整個Fractional
類。
最常用的是Double
,它是一個雙精度浮點數。您也可以使用單精度的Float
。
另一種替代方法是使用Rational
類型,該類型允許您以兩個Integer
的比率存儲數字。 (巧合的是,Integer
是無限整型。Int
是有界版本的名稱)。
這些類型(Double
,Float
和Rational
)有利於合理的存儲值。如果你只是想存儲一個大的整數值,使用無限制的Integer
。 (也就是說,它可以存儲任意大小的整數。)
這些中的任何一個當然可以使用例如'讀取「123.456」:: Double',除了需要像'read「15432%125」'這樣的語法的'Rational'。 – dflemstr 2012-02-21 11:21:43
如果你需要的精度是(ahem)_fixed_,我會使用'Data.Fixed'而不是Rational。除非我正在與另一個存儲IEEE浮點數的系統進行互操作,否則我會小心存儲雙精度。如果您需要快速計算,則在序列化和反序列化它們時,可以將「固定」更改爲「雙精度」,則會按預期進行四捨五入。 – 2012-02-21 13:58:23
問題是這是否真是一個真正的小數值,或者如果最好將它解釋爲適當單位的整數。即如果您的輸入是毫秒值,您可能需要將其轉換爲積分納秒值。 – Ingo 2012-02-21 10:36:49