doubleを整数部と小数部に分ける方法

1.概要

このチュートリアルでは、Javaの浮動小数点型の整数部と小数部を分離するためのさまざまな方法、つまり float double を探ります。

2.浮動小数点型に関する問題

単純な部分と、キャストによる分離を実行する単純な方法を見てみましょう。

double doubleNumber = 24.04;
int intPart = (int) doubleNumber;
System.out.println("Double Number: " + doubleNumber);
System.out.println("Integer Part: " + intPart);
System.out.println("Decimal Part: " + (doubleNumber - intPart));

上記のコードを実行しようとすると、次のようになります。

Double Number: 24.04
Integer Part: 24
Decimal Part: 0.03999999999999915

私たちの予想に反して、出力は小数部を正しく表示しません。したがって、浮動小数点数は丸め誤差を許容できない計算には適していません。

3.最初のアプローチ: String を分割する

まず最初に、10進数を String に相当するものに変換しましょう。

それから String を小数点インデックスで分割することができます。

例でこれを理解しましょう。

double doubleNumber = 24.04;
String doubleAsString = String.valueOf(doubleNumber);
int indexOfDecimal = doubleAsString.indexOf(".");
System.out.println("Double Number: " + doubleNumber);
System.out.println("Integer Part: " + doubleAsString.substring(0, indexOfDecimal));
System.out.println("Decimal Part: " + doubleAsString.substring(indexOfDecimal));

上記のコードの出力は次のとおりです。

Double Number: 24.04
Integer Part: 24
Decimal Part: .04

出力はまさに私たちが期待しているものです。しかし、ここでの問題は、文字列を使用することの制限です。これは、他の算術演算を実行できないことを意味します。

4. 2番目のアプローチ: BigDecimal を使う

Javaのhttps://docs.oracle.com/javase/8/docs/api/java/math/BigDecimal.html[ BigDecimal ]クラスを使用すると、丸めの振る舞いを完全に制御できます。

このクラスは算術、スケール操作、丸め、比較、ハッシュ、そしてフォーマット変換のための操作も提供します。

浮動小数点数の整数部と小数部を取得するには、 BigDecimal を使用しましょう。

double doubleNumber = 24.04;
BigDecimal bigDecimal = new BigDecimal(String.valueOf(doubleNumber));
int intValue = bigDecimal.intValue();
System.out.println("Double Number: " + bigDecimal.toPlainString());
System.out.println("Integer Part: " + intValue);
System.out.println("Decimal Part: " + bigDecimal.subtract(
  new BigDecimal(intValue)).toPlainString());

出力は次のようになります。

Double Number: 24.04
Integer Part: 24
Decimal Part: 0.04

上記のとおり、出力は予想どおりです。 BigDecimal クラスで提供されているメソッドを使用して算術演算を実行することもできます。

5.まとめ

この記事では、浮動小数点型の整数部分と小数部分を分離するためのさまざまな方法について説明しました。浮動小数点計算に BigDecimal を使用する利点についても説明しました。

また、https://www.baeldung.com/java-bigdecimal-biginteger[JavaのBigDecimalおよびBigInteger]に関する詳細なチュートリアルでは、2つのクラスのより多くの特性と使用シナリオについて説明しています。

最後に、このチュートリアルの完全なソースコードは https://github.com/eugenp/tutorials/tree/master/core-java-lang [available GitHubで。