-3

double特定の基準に基づいてインクリメントしている 2 つのカウンターがあります。カウンタは 1 または .01 ずつ増加し、結果は 、 、 などのシリアル番号で合計されます1.001.01またはのよう1.02な結果が得られます。1.019999999991.111111111111double

私は BigDecimal を使用しようとしていますが、Java ドキュメントには示されていますが、

BigDecimal(double val)
           Translates a double into a BigDecimal which is the exact decimal representation of the double's binary floating-point value.

コードを機能させることができません。

            ....
if (condition1) {
    indexNo = indexNo + 1;
    subIndexNo = .00;
} else
    if (condition2) {
        subIndexNo = subIndexNo + .01;
    }
recNo = indexNo + subIndexNo;
BigDecimal record = BigDecimal(double recNo);

コンパイラからのエラー メッセージ

C:\pathtojava\sync\java\bin>javac ParseWhiData.java
ParseWhiData.java:97: error: '.class' expected
                                BigDecimal record = BigDecimal(double recNo);
                                                                      ^
ParseWhiData.java:97: error: ';' expected
                                BigDecimal record = BigDecimal(double recNo);
                                                                           ^
2 errors

BigDecimal へのアクセス中に何が間違っていますか? double を Big Demimal に変換するための適切な構文は何ですか?また、最も重要なのは1.0199999999991.02

4

2 に答える 2

5

BigDecimal (および Java のすべてのオブジェクト) は、newオペレーターによってインスタンス化されます。

また、doubleという名前の変数を既に定義しているため、コンストラクターのキーワードを削除しますrecNo

変化する

BigDecimal record = BigDecimal(double recNo);

BigDecimal record = new BigDecimal(recNo);
于 2013-10-22T15:11:07.607 に答える
3

BigDecimal(String val)正確な精度を得るには、他のコンストラクターを使用する必要があります。

BigDecimal a = new BigDecimal("4.81");
BigDecimal b = new BigDecimal("0.01");
BigDecimal c = a.add(b);
System.out.println(c);

BigDecimal d = new BigDecimal(4.81);
BigDecimal e = new BigDecimal(0.01);
BigDecimal f = d.add(e);
System.out.println(f);

出力:

4.82
4.81999999999999960940966214906211462221108376979827880859375
于 2013-10-22T15:25:04.897 に答える