1. ホーム
  2. java

[解決済み] double 型から BigDecimal 型への変換と BigDecimal 型の精度の設定

2023-04-22 03:12:31

質問

Javaで、doubleの値を、(2)のように BigDecimal に変換し、そのString値をある精度で出力したい。

import java.math.BigDecimal;
public class Main {
    public static void main(String[] args) {
        double d=-.00012;
        System.out.println(d+""); //This prints -1.2E-4

        double c=47.48000;
        BigDecimal b = new BigDecimal(c);
        System.out.println(b.toString()); 
        //This prints 47.47999999999999687361196265555918216705322265625 
    }
}

こんな巨大なものが印刷されます。

47.47999999999999687361196265555918216705322265625

でなく

<ブロッククオート

47.48

をやっている理由は BigDecimal に変換しているのは、double 値が多くの小数点以下の桁数を含むことがあるからです (すなわち -.000012 のように)、double 型の値を String 型に変換すると、科学的記数法になります。 -1.2E-4 . Stringの値を非科学的記法で格納したい。

BigDecimalに"47.48"のように常に2単位の精度を持たせたいのです。 BigDecimalは文字列に変換する際に精度を制限することができますか?

どのように解決すればよいですか。

47.48000と表示されます。 MathContext :

BigDecimal b = new BigDecimal(d, MathContext.DECIMAL64);

必要なコンテキストを選ぶだけ。