での浮動小数点値を読んで、私は(パース)を認識するために何の問題もない解析と私はHaskellのでパースに取り組んでいますハスケル
946685561.618847
ような方法で表現したタイムスタンプ値を解析することしかし、私の問題は、結果の種類についてです。私は2つの状況を考えます:
- 結果が小数値に関連付けられるように、Haskellに小数型がありますか?
- そうでない場合、次に-2 から
Int
範囲ため、この値を格納する方法 - 1?
での浮動小数点値を読んで、私は(パース)を認識するために何の問題もない解析と私はHaskellのでパースに取り組んでいますハスケル
946685561.618847
ような方法で表現したタイムスタンプ値を解析することしかし、私の問題は、結果の種類についてです。私は2つの状況を考えます:
Int
範囲ため、この値を格納する方法 - 1?実際には複数の分数タイプがあります。Fractional
クラスもあります。最も一般的に使用される
は倍精度浮動小数点数である、Double
あります。単精度のFloat
を使用することもできます。
もう1つの方法は、Rational
タイプを使用することです。このタイプを使用すると、数字を2つのInteger
の比率で保存できます。 (偶然にも、Integer
は無制限整数型です。Int
は有界バージョンの名前です。)
これらのタイプ(Double
、Float
とRational
は)合理的な値を格納するのに適しています。大きい整数値を保存するだけの場合は、無制限のInteger
を使用します。 (すなわち、任意の大きさの整数を格納することができます)
これらは、もちろん、例えば、 'read" 123.456 ":: Double"、 'read"のような構文を必要とする 'Rational'以外は15432%125" 'です。 – dflemstr
必要な精度が(ahem)_fixed_の場合は、RationalではなくData.Fixedを使用します。私はIEEE floatを格納している別のシステムと相互運用していない限り、Doublesを格納することには注意が必要です。高速計算が必要な場合は、シリアル化とデシリアライズ時にFixed to Doubleを変更すると、期待どおりの丸めが得られます。 –
これは実際には分数値であるか、これを適切な単位で整数と解釈する方が良いかどうかです。私。入力がミリ秒の値であれば、整数ナノ秒値に変換することができます。 – Ingo