2012-02-21 50 views
0

我的工作哈斯克爾解析,我想分析這樣解析和讀取浮點值在Haskell

946685561.618847 

我沒有問題,認識到(解析)表示的時間戳值它,但我的問題是關於結果的類型。我想到兩種情況:

  1. Haskell中是否存在小數類型,以便結果可以與小數值相關聯?
  2. 如果不是這種情況,那麼如何存儲這個值,因爲Int範圍從-2 至2 - 1?
+2

問題是這是否真是一個真正的小數值,或者如果最好將它解釋爲適當單位的整數。即如果您的輸入是毫秒值,您可能需要將其轉換爲積分納秒值。 – Ingo 2012-02-21 10:36:49

回答

6

實際上有多種小數類型 - 甚至有整個Fractional類。

最常用的是Double,它是一個雙精度浮點數。您也可以使用單精度的Float

另一種替代方法是使用Rational類型,該類型允許您以兩個Integer的比率存儲數字。 (巧合的是,Integer無限整型。Int是有界版本的名稱)。

這些類型(DoubleFloatRational)有利於合理的存儲值。如果你只是想存儲一個大的整數值,使用無限制的Integer。 (也就是說,它可以存儲任意大小的整數。)

+1

這些中的任何一個當然可以使用例如'讀取「123.456」:: Double',除了需要像'read「15432%125」'這樣的語法的'Rational'。 – dflemstr 2012-02-21 11:21:43

+1

如果你需要的精度是(ahem)_fixed_,我會使用'Data.Fixed'而不是Rational。除非我正在與另一個存儲IEEE浮點數的系統進行互操作,否則我會小心存儲雙精度。如果您需要快速計算,則在序列化和反序列化它們時,可以將「固定」更改爲「雙精度」,則會按預期進行四捨五入。 – 2012-02-21 13:58:23