数値リテラルの書き方
Java 2015/09/23
整数リテラルは、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から使える書き方 2013/10/15
Java7からの機能では、0b
または0B
で始まる2進数表記もできる(バイナリリテラル)。
2進数表記でも最後に l
または L
を付けることでlong
型になる。
同じくJava7からは、整数は3ケタごとの区切りなどとして途中にアンダースコアを入れることができる。 10進数表記、8進数表記、16進数表記、2進数表記ともに使える。
入れる場所はどこでもよく、コンパイラは単に途中のアンダースコアを無視する。ただし、最初や最後にアンダースコアを置くことはできない。最初に置くと識別子になってしまう。アンダースコアは2つ以上連続させることもできる(使い道がわからないが)。
Scala 2015/09/23
整数のリテラルは、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 2015/04/10
例
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 2015/04/08
例
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 2015/04/08
例
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