この節ではErlangの数の型について学びます。
数の型に関してはCやJavaと多少異なるのですが、むしろErlangのほうが簡単だと言えるかもしれません。
Erlangが提供している数の型は2つのタイプを扱えます。
早速、サンプルを見てみましょう。
1> 42.
42
2> 3.7.
3.70000
3> 4/7.
0.571429
4> 9/4.
2.25000
注目して欲しいのは、上の式では少数などを全く気にしていないということです。
CやJavaなどではintとdouble(float)を意識する必要がありますが、 Erlangにおいては最適な物を使ってくれるので普段は意識しないでも大丈夫です。 整数/整数も自動的に少数に変換してくれています。
整数型の除算と剰余(余りを求める)は、以下のように行います。 ちなみに、少数の剰余は行えないようです。
5> 8 div 5.
1
6> 7 rem 3.
1
通常の言語では、数の桁数に制限があります。
たとえば、Javaのintでは4バイト使われて「-2147483648〜+2147483647」の範囲を表すことができます。
この値を超えた値を代入した際は予期しない動作が起こるかもしれません。
Erlangの整数型においては、誤差がありません。オーバーフローといったことは気にしなくても大丈夫です。
7> X = 123456789.
123456789
8> X * X * X * X * X.
28679718602997181072337614380936720482949
演算に用いる記号を記します。
演算記号 | 役割 | 利用例 |
---|---|---|
+/- | 正負の数を表す | +5, -8 |
+ | 加算を行なう | 3 + (-2) |
- | 減算を行なう | 8 - 6 |
* | 乗算を行なう | 4 * 9 |
/ | 除算を行なう | 8 / 5 |
div | 整数の除算を行なう。 | 8 div 5 |
rem | 剰余(余り)を求める | 8 rem 5 |
10進数以外の数を扱うことも可能です。
基数#数
とすることによって、数を基数の進数の物と認識します。
基数とは、N進数におけるNのことです。例えば、16進数の基数は16です。
> 16#A.
10
8#13.
11
Aは変数ではありません。これは数です。
> is_number(-3.4).
true
> is_number({hello,3}).
false
> is_integer(8).
true
> is_integer(3.3).
false
> is_float(8).
false
> is_float(1.3).
true
> abs(-3.33).
3.33
> abs(-3).
3
> round(5.5).
6
> round(5.4).
5
> trunc(5.5).
5
> float(55).
55.0
> integer_to_list(77).
"77"
> list_to_integer("123").
123
> erlang:integer_to_list(1023, 16).
"3FF"
> erlang:list_to_integer("3FF", 16).
1023
> float_to_list(7.0).
"7.00000000000000000000e+00"
> list_to_float("2.2017764e+0").
2.2017764