Javaで巨大な数字(最大40桁まで)を保存するのに使用できる本当に大きな変数型はありますか?
long
の最大値は9223372036854775807で、これは19桁で、十分な大きさではありません。
私は現在、ほとんどの場合10桁程度しか保持できないため、大きな数を処理できる計算機を作成しようとしていますが、はるかに大きな数の正確な計算が必要です
[〜#〜] edit [〜#〜]
答えてくれてありがとう。大きな整数にはBigInteger
を使用できますが、唯一の制限はコンピューターのメモリです(十分なはずです)。小数の場合、@ WebDaldoが示唆したfloat
^ e、または@kockoが示唆したBigDecimal
(BigIntegerに類似)を使用します。
BigInteger クラスを使用できます。
BigInteger bi1 = new BigInteger("637824629384623845238423545642384");
BigInteger bi2 = new BigInteger("3039768898793547264523745379249934");
BigInteger bigSum = bi1.add(bi2);
BigInteger bigProduct = bi1.multiply(bi2);
System.out.println("Sum : " + bigSum);
System.out.println("Product : " + bigProduct);
出力:
合計:3677593528178171109762168924892318
製品:1938839471287900434078965247064711159607977007048190357000119602656
BigDecimal に言及する必要があります。これは、doubleと比較して金額計算に優れています。
BigDecimal bd = new BigDecimal("123234545.4767");
BigDecimal displayVal = bd.setScale(2, RoundingMode.HALF_EVEN);
NumberFormat usdFormat = NumberFormat.getCurrencyInstance(Locale.US);
System.out.println(usdFormat.format(displayVal.doubleValue()));
出力:
123,234,545.48
本当に巨大な整数を扱う操作には BigInteger クラスを使用してみてください。
浮動小数点数を使用する操作の場合、Javaは BigDecimal クラスを提供します。これは同様に便利です。
電卓で使用するような指数を使用した計算では、BigDecimal
を使用する必要があります。 BigInteger
の問題は、整数(小数ではない)のみを処理し、10 ^ 100のような非常に大きな数値では、科学に基づく形式を使用する代わりに、多くのメモリを使用してすべてのゼロを格納することです表記法。
代わりに、浮動小数点数型double
を使用することもできます。これにより、値の範囲が広くなり、メモリの使用量が少なくなり、操作が高速になります。ただし、丸めの問題と精度の制限(10進数で約16桁)があるため、何をしているのか本当に理解していない限り、使用することはお勧めしません。
Float ^ eを使用できます
だからあなたが持つことができる
0.55342663552772737682136182736127836782163 * 10^e
電卓もほとんどそれを使用しています。
これは、intを使用すると問題が発生するため、15を超えるすべての大きな数値に対応しています。 50または100 0r 500の階乗を見つけることができます。
// Recursive version of the Fat factorial for bigger numbers ex: Factorial of 500
BigInteger fatFactorial(int b) {
if (BigInteger.ONE.equals(BigInteger.valueOf(b))
|| BigInteger.ZERO.equals(BigInteger.valueOf(b))) {
return BigInteger.ONE;
} else {
return BigInteger.valueOf(b).multiply(fatFactorial(b - 1));
}
}