Java Number & Math クラス
Java Number
一般的に、数値が必要なときは、通常組み込みのデータ型を使用します。例:byte、int、long、doubleなど。
例
しかし、実際の開発プロセスでは、組み込みデータ型ではなくオブジェクトを使用する必要がある状況に頻繁に遭遇します。この問題を解決するために、Java 言語は各組み込みデータ型に対応するラッパークラスを提供しています。
すべてのラッパークラスは(Integer、Long、Byte、Double、Float、Short)抽象クラス Number のサブクラスです。
| クラス名 | 対応する基本型 | 説明 |
|---|---|---|
| Byte | byte | バイト型ラッパークラス |
| Short | short | 短整数型ラッパークラス |
| Integer | int | 整数型ラッパークラス |
| Long | long | 長整数型ラッパークラス |
| Float | float | 単精度浮動小数点型ラッパークラス |
| Double | double | 倍精度浮動小数点型ラッパークラス |
| BigInteger | - | 不変の任意精度整数 |
| BigDecimal | - | 不変の任意精度符号付き十進数 |
このようなコンパイラによって特別にサポートされるラッピングをボクシング(装箱)と呼びます。組み込みデータ型がオブジェクトとして使用されるとき、コンパイラは組み込み型をラッパークラスにボクシングします。同様に、コンパイラはオブジェクトを組み込み型にアンボクシングすることもできます。
Number クラスは java.lang パッケージに属します。
Number は抽象クラスであり、主にさまざまな数値型に統一的な変換メソッドを提供する役割を持ちます:
例
// 抽象メソッド
public abstract int intValue();
public abstract long longValue();
public abstract float floatValue();
public abstract double doubleValue();
// Java 8 で追加
public byte byteValue() {
return (byte)intValue();
}
public short shortValue() {
return (short)intValue();
}
}
以下は Integer オブジェクトを使用した例です:
Test.java ファイルコード:
上記の例をコンパイルして実行した結果は次のとおりです:
15
x に整数値が代入されると、x はオブジェクトであるため、コンパイラは x をボクシングします。その後、x に加算演算を行えるようにするため、x をアンボクシングする必要があります。
よく使うメソッドの例
基本型の変換
例
System.out.println(num.intValue()); // 1234 (小数切り捨て)
System.out.println(num.longValue()); // 1234
System.out.println(num.floatValue()); // 1234.56
System.out.println(num.doubleValue()); // 1234.56
数値の比較
例
Integer x = 10;
Double y = 10.0;
// 正しい比較方法:同じ型に変換してから比較する
System.out.println(x.doubleValue() == y.doubleValue()); // true
特殊な数値の処理
大きな数値の処理
例
BigDecimal bigDec = new BigDecimal("1234567890.1234567890");
// 大きな数値の演算
BigInteger sum = bigInt.add(new BigInteger("1"));
BigDecimal product = bigDec.multiply(new BigDecimal("2"));
数値のフォーマット
例
nf.setMaximumFractionDigits(2);
System.out.println(nf.format(1234.5678)); // "1,234.57"
自動ボクシングとアンボクシング
Java 5+ は自動変換をサポートしています:
例
Integer autoBoxed = 42; // コンパイラは Integer.valueOf(42) に変換します
// 自動アンボクシング
int autoUnboxed = autoBoxed; // コンパイラは autoBoxed.intValue() に変換します
Java Math クラス
Math クラスは Java が提供する数学ユーティリティクラスで、java.lang パッケージにあり、基本的な数値演算を実行する静的メソッドを含みます。
Java の Math には、初等指数、対数、平方根、三角関数などの基本的な数学演算を実行するためのプロパティとメソッドが含まれています。
Math のメソッドはすべて static 形式で定義されており、Math クラスを通じてメイン関数内で直接呼び出すことができます。
Test.java ファイルコード:
上記の例をコンパイルして実行した結果は次のとおりです:
90 度的正弦值:1.0 0度的余弦值:1.0 60度的正切值:1.7320508075688767 1的反正切值: 0.7853981633974483 π/2的角度值:90.0 3.141592653589793
高度な数学演算
1. 指数・対数演算
例
Math.log(Math.E); // ln(e) = 1
Math.log10(100); // log10(100) = 2
2. 乱数生成
例
double random = Math.random();
// [1, 100] のランダムな整数を生成
int randomInt = (int)(Math.random() * 100) + 1;
3. その他の演算
例
Math.IEEEremainder(10, 3); // IEEE 剰余 → 1.0
4. 定数フィールド
例
Math.E; // 自然対数の底 e ≈ 2.718281828459045
Number & Math クラスのメソッド
以下の表は、Number & Math クラスでよく使われるメソッドの一部です:
| 番号 | メソッドと説明 |
|---|---|
| 1 |
xxxValue() Number オブジェクトを xxx データ型の値に変換して返します。 |
| 2 |
compareTo() number オブジェクトを引数と比較します。 |
| 3 |
equals() number オブジェクトが引数と等しいかどうかを判定します。 |
| 4 |
valueOf() 指定された組み込みデータ型の Number オブジェクトを返します。 |
| 5 |
toString() 値を文字列形式で返します。 |
| 6 |
parseInt() 文字列を int 型に解析します。 |
| 7 |
abs() 引数の絶対値を返します。 |
| 8 |
ceil() 指定された引数以上(>=)の最小の整数を返します。型は倍精度浮動小数点型です。 |
| 9 |
floor() 指定された引数以下(<=)の最大の整数を返します。 |
| 10 |
rint() 引数に最も近い整数を返します。戻り値の型は double です。 |
| 11 |
round() これは四捨五入を表し、アルゴリズムはMath.floor(x+0.5)つまり、元の数値に 0.5 を加えた後に切り捨てます。したがって、Math.round(11.5) の結果は 12、Math.round(-11.5) の結果は -11 です。 |
| 12 |
min() 2 つの引数のうち小さい方を返します。 |
| 13 |
max() 2 つの引数のうち大きい方を返します。 |
| 14 |
exp() 自然対数の底 e の引数乗を返します。 |
| 15 |
log() 引数の自然対数(底 e)の値を返します。 |
| 16 |
pow() 最初の引数の 2 番目の引数乗を返します。 |
| 17 |
sqrt() 引数の算術平方根を求めます。 |
| 18 |
sin() 指定された double 型引数の正弦値を求めます。 |
| 19 |
cos() 指定された double 型引数の余弦値を求めます。 |
| 20 |
tan() 指定された double 型引数の正接値を求めます。 |
| 21 |
asin() 指定された double 型引数の逆正弦値を求めます。 |
| 22 |
acos() 指定された double 型引数の逆余弦値を求めます。 |
| 23 |
atan() 指定された double 型引数の逆正接値を求めます。 |
| 24 |
atan2() デカルト座標を極座標に変換し、極座標の角度値を返します。 |
| 25 |
toDegrees() 引数を角度に変換します。 |
| 26 |
toRadians() 角度をラジアンに変換します。 |
| 27 |
random() 乱数を返します。 |
Math の floor, round, ceil メソッドの実例比較
| パラメータ | Math.floor | Math.round | Math.ceil |
|---|---|---|---|
| 1.4 | 1 | 1 | 2 |
| 1.5 | 1 | 2 | 2 |
| 1.6 | 1 | 2 | 2 |
| -1.4 | -2 | -1 | -1 |
| -1.5 | -2 | -1 | -1 |
| -1.6 | -2 | -2 | -1 |
floor, round, ceil の例:
上記の例を実行した出力結果は次のとおりです:
Math.floor(1.4)=1.0 Math.round(1.4)=1 Math.ceil(1.4)=2.0 Math.floor(1.5)=1.0 Math.round(1.5)=2 Math.ceil(1.5)=2.0 Math.floor(1.6)=1.0 Math.round(1.6)=2 Math.ceil(1.6)=2.0 Math.floor(-1.4)=-2.0 Math.round(-1.4)=-1 Math.ceil(-1.4)=-1.0 Math.floor(-1.5)=-2.0 Math.round(-1.5)=-1 Math.ceil(-1.5)=-1.0 Math.floor(-1.6)=-2.0 Math.round(-1.6)=-2 Math.ceil(-1.6)=-1.0その他の拡張