Integerは、マシンのメモリの許す限り、どんなに大きな数でも保持できます。一方、Intは、32ビットまたは64ビットで表現できる正負の整数の集合に対応します(少なくとも-2^29から2^29までが保証されています)。
Floatは実数の集合に対応し、コンピューターの精度によって制限されます。
数値に対して定義された演算は、ふつうどちらか一方の型では機能しますが、両方では機能しません。
FloatとIntegerの間で変換する関数には、Int/IntegerをFloatに変換するtoFloatや、FloatをIntに変換するceilingなどがあります。
整数型(IntまたはInteger)から他の数値型への変換には、関数fromIntegralを使います。
変換先の型は自動的に推論されます。
たとえば、次のようになります。
n :: Integer
n = 6
x :: Float
x = fromIntegral n --> x = 6.0
m :: Int
m = 7
y :: Double
y = fromIntegral m --> y = 7.0
あなたは、国際的なボランティアで構成された消防隊の一員です。 チームが国際色豊かであるため、燃えている建物の中の温度を見積もるたびに華氏と摂氏を換算するのに、これまでの何度かの出動で貴重な時間が無駄になってしまっていました。 時間と、そして人命を救うために、国際チームのために華氏と摂氏を自動で変換するプログラムを作ることにします。
tempToC関数を実装して、華氏のIntegerの温度を、小数第2位に四捨五入した摂氏のFloatに変換しましょう。
摂氏での温度は次のように定義されます。T(°C) = (T(°F) - 32) / 1.8
> tempToC 32
0.00
tempToF関数を実装して、摂氏のFloatの温度を華氏に変換しましょう。
安全上の理由から、結果は切り上げて、次に大きいIntegerにします。
華氏での温度は次のように定義されます。T(°F) = T(°C) × 1.8 + 32
> tempToF 4
40