Erlang World


top > data type > number

Number

Erlangにおける数の扱い

この節では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

n進数

10進数以外の数を扱うことも可能です。

基数#数

とすることによって、数を基数の進数の物と認識します。
基数とは、N進数におけるNのことです。例えば、16進数の基数は16です。

> 16#A.
10

8#13.
11

Aは変数ではありません。これは数です。

BIF 数に関する判定

is_number(Term) -> bool()
Term = term()
Termが数ならtrueを返す。違えばfalseを返す。
> is_number(-3.4).
true

> is_number({hello,3}).
false
is_integer(Term) -> bool()
Term = term()
Termが整数ならtrueを返す。違えばfalseを返す。
> is_integer(8). 
true

> is_integer(3.3).
false
is_float(Term) -> bool()
Term = term()
Termが浮動小数点数ならtrueを返す。違えばfalseを返す。
> is_float(8).
false

> is_float(1.3).
true

BIF 数の変換

abs(Number) -> int() | float()
Number = number()
数Numberの絶対値を返す。
> abs(-3.33).
3.33

> abs(-3).
3
round(Number) -> int()
Number = number()
数Numberを四捨五入して整数にする。
> round(5.5).
6

> round(5.4).
5
trunc(Number) -> int()
Number = number()
小数を切り捨てて整数を返す。
> trunc(5.5).
5
float(Number) -> float()
Number = number()
数Numberを浮動小数点数として返す。
> float(55).
55.0

数型から別の型への変換

integer_to_list(Integer) -> string()
Integer = int()
整数を文字列に変換します。
> integer_to_list(77).
"77"
list_to_integer(String) -> int()
String = string()
文字列を整数に変換する。変換できないようなら例外が投げられる。
> list_to_integer("123").
123
erlang:integer_to_list(Integer, Base) -> string()
Integer = int()
Base = 2..36
数Numberを浮動小数点数として返す。
> erlang:integer_to_list(1023, 16).
"3FF"
erlang:list_to_integer(String, Base) -> int()
Integer = int()
Base = 2..36
文字列を基数Baseの整数として変換し、それを10進数で表示する。
> erlang:list_to_integer("3FF", 16).
1023
float_to_list(Float) -> string()
Float = float()
浮動小数点数をリストに変換する。
> float_to_list(7.0).
"7.00000000000000000000e+00"
list_to_float(String) -> float()
String = string()
文字列を浮動小数点数に変換する。変換できないようなら例外が投げられる
> list_to_float("2.2017764e+0").
2.2017764

Yuichi ITO. All rights reserved.
mail to : ad
inserted by FC2 system