数値リテラルの書き方

Java Python Ruby Perl

Java

整数リテラルは、10進数での表記のほか、 0xまたは0Xで始まる16進数表記、0で始まる8進数表記を使える。整数リテラルの最後に l または L を付けるとlong型の整数になり、付けないとint型の整数になる。それぞれ型の範囲を超える数を書くとコンパイルエラーになる。

浮動小数点数のリテラルは、10進数表記のみで、後ろにつける指数表現は e+10, e10, e-10 のように書く。 e の代わりに E でもよい。最後に f または F を付けるとfloat型の浮動小数点数になり、なにも付けないか、または d または D を付けるとdouble型の浮動小数点数になる。それぞれ型の範囲を超える数を書くとコンパイルエラーになる。

NaN値は Float.NaN または Double.NaN と書く。正の無限大は Float.POSITIVE_INFINITY または Double.POSITIVE_INFINITY、負の無限大は Float.NEGATIVE_INFINITY または Double.NEGATIVE_INFINITY と書く。

Integer Literals | The Java Language Specification Java SE 8 Edition
http://docs.oracle.com/javase/specs/jls/se8/html/jls-3.html#jls-3.10.1

Floating-Point Literals | The Java Language Specification Java SE 8 Edition
http://docs.oracle.com/javase/specs/jls/se8/html/jls-3.html#jls-3.10.2

System.out.println(123);
System.out.println(123_456); // アンダースコアで桁をグルーピングできる
//System.out.println(12345678901); // integer number too large: 12345678901 というコンパイルエラー
System.out.println(1234567890123456789l); // long型は l または L を付ける
System.out.println(1234567890123456789L); // long型は l または L を付ける
//System.out.println(12345678901234567890L); // integer number too large: 12345678901234567890 というコンパイルエラー
System.out.println(123_456_789_012_345_678_9L); // long型にもアンダースコアで桁をグルーピングできる
System.out.println(123.45);
System.out.println(.45);
System.out.println(0.45);
System.out.println(1.23e67);
System.out.println(1.23E67);
System.out.println(1.23e+67);
System.out.println(1.23e-67);
System.out.println(.23e67); // 2.3E66
System.out.println(0b10); // 2進数で解釈。2
System.out.println(0B10); // 2進数で解釈。2
System.out.println(0644); // 8進数で解釈。420
System.out.println(0_644); // 8進数でもアンダースコアを使える。420
System.out.println(0x12); // 16進数で解釈。18
System.out.println(0x12_34_56); // 16進数でもアンダースコアを使える
//System.out.println(0x_12_34_56); // illegal underscore というコンパイルエラー

Java7から使える書き方

Java7からの機能では、0bまたは0Bで始まる2進数表記もできる(バイナリリテラル)。 2進数表記でも最後に l または L を付けることでlong型になる。

同じくJava7からは、整数は3ケタごとの区切りなどとして途中にアンダースコアを入れることができる。 10進数表記、8進数表記、16進数表記、2進数表記ともに使える。

入れる場所はどこでもよく、コンパイラは単に途中のアンダースコアを無視する。ただし、最初や最後にアンダースコアを置くことはできない。最初に置くと識別子になってしまう。アンダースコアは2つ以上連続させることもできる(使い道がわからないが)。

Scala

整数のリテラルは、10進数表記の他、0xまたは0Xで始まる16進数表記を使える。

println(123);
//println(123_456); // Invalid literal number というコンパイルエラー
//println(12345678901); // integer number too large というコンパイルエラー
println(1234567890123456789l); // Long型は l または L を付ける
println(1234567890123456789L); // Long型は l または L を付ける
//println(12345678901234567890L); // integer number too large というコンパイルエラー
//println(123_456_789_012_345_678_9L); // Invalid literal number というコンパイルエラー
println(123.45);
println(.45);
println(0.45);
println(1.23e67);
println(1.23E67);
println(1.23e+67);
println(1.23e-67);
println(.23e67); // 2.3E66
//println(0b10); // Invalid literal number というコンパイルエラー
//println(0B10); // Invalid literal number というコンパイルエラー
//println(0644); // Decimal integer literals may not have a leading zero. (Octal syntax is obsolete.) というコンパイルエラー
//println(0_644); // Invalid literal number というコンパイルエラー
println(0x12); // 16進数で解釈。18
//println(0x12_34_56); // Invalid literal number というコンパイルエラー
//println(0x_12_34_56); // Invalid literal number というコンパイルエラー

Integer Literals | Scala Language Specification
http://scala-lang.org/files/archive/spec/2.11/01-lexical-syntax.html#integer-literals

Floating Point Literals | Scala Language Specification
http://scala-lang.org/files/archive/spec/2.11/01-lexical-syntax.html#floating-point-literals

Python

from pprint import pprint

pprint(123)
# pprint(123_456) # => アンダースコアは使えない
pprint(123456789012345678901) # Python2では 123456789012345678901L と出力。Python3では 123456789012345678901 のまま出力
# pprint(123_456_789_012_345_678_901) # => アンダースコアは使えない
pprint(123.45)
pprint(.45)
pprint(0.45)
pprint(1.23e67)
pprint(1.23E67)
pprint(1.23e+67)
pprint(1.23e-67)
pprint(.23e67) # => 2.3e+66
pprint(0b10) # => 2進数で解釈。2
pprint(0B10) # => 2進数で解釈。2
pprint(0644) # => Python2では 8進数で解釈して420。Python3ではSyntaxError
# pprint(0_644) # => アンダースコアは使えない
pprint(0X12) # => 16進数で解釈。18
# pprint(0x12_34_56) # => アンダースコアは使えない
# pprint(0x_12_34_56) # => アンダースコアは使えない

数値リテラル | Python 2.7 documentation
http://docs.python.jp/2/reference/lexical_analysis.html#numbers

数値リテラル | Python 3 documentation
http://docs.python.jp/3/reference/lexical_analysis.html#numbers

Ruby / JRuby

123
123_456 # => アンダースコアで桁をグルーピングできる
123_456_789_012_345_678_901 # 大きい数字もそのまま表現できる
123.45
# .45 # => 小数点の前の0は省略できない
0.45
1.23e67
1.23E67
1.23e+67
1.23e-67
# .23e67 # => 小数点の前の0は省略できない
0b10 # => 2進数で解釈。2
0B10 # => 2進数で解釈。2
0644 # => 8進数で解釈。420
0o644 # => 8進数で解釈。420
0O644 # => 8進数で解釈。420
0_644 # => 8進数で解釈。420
0X12 # => 16進数で解釈。18
0x12_34_56 # => 1193046
# 0x_12_34_56 # => 0b, 0o, 0x の直後にはアンダースコアを置けない

Perl

123;
123_456; # => アンダースコアで桁をグルーピングできる
123_456_789_012_345_678_901; # => 1.23456789012346e+20
123.45;
.45;
0.45;
1.23e67;
1.23E67;
1.23e+67;
1.23e-67;
.23e67; # => 2.3e+66
0b10; # => 2進数で解釈。2
0B10; # => 2進数で解釈。2
0644; # => 8進数で解釈。420
0_644; # => 8進数で解釈。420
0x12; # => 16進数で解釈。18
0x12_34_56; # => 1193046
0x_12_34_56; # => 1193046
このサイトは筆者(hydrocul)の個人メモの集合です。すべてのページは永遠に未完成です。