3

私はこの単純な問題を抱えています。

サンプル入力:

入力 1 95.123

入力 212

最初の入力を 2 番目の入力に上げると、電力の正確な値が得られます。このような :548815620517731830194541.8990253434157159735359672218698

私はそれを正しく理解できません。

これが私がこれまでに行ったことです。私は何かが欠けていると思います

System.out.println("Input One");
Scanner scanner = new Scanner(System.in);
Double inputOne = scanner.nextDouble();
System.out.println("Input Two");
Double inputTwo = scanner.nextDouble();
Double result = Math.pow(inputOne, inputTwo);
BigDecimal big = new BigDecimal(result);
System.out.println(big);

私は何を見逃していますか?

4

3 に答える 3

10

私は何を見逃していますか?

double最初に使用していて、 double95.123 を正確に表すことはできません。次に、double 値を使用Math.powしているため、精度がさらに低下します。すでに損失のある値を高精度の値に変換しても意味がありません...魔法のようにデータを回復することはできません。

最初の引数のコンストラクターに文字列を渡すだけで、計算を実行できます。BigDecimalBigDecimal.pow

サンプルコード:

import java.math.BigDecimal;

public class Test {

    public static void main(String[] args) {
        BigDecimal inputOne = new BigDecimal("95.123");
        int power = 12;
        BigDecimal result = inputOne.pow(power);
        System.out.println(result);
    }
}

出力:

548815620517731830194541.899025343415715973535967221869852721

(期待値が実際には切り捨てられているようです... 3 12は 1 で終わるため、正確な値は間違いなく 1 で終わるはずです。)

于 2012-10-09T19:00:26.080 に答える
2

pow を実行する前に BigDecimal を使用する必要があります。たとえば、次は期待される結果を返します。

System.out.println(new BigDecimal("95.123").pow(12));

aには正確な値を保持するのに十分な精度がないため、渡される値はBigDecimala でなければならないことに注意してください。Stringdouble

于 2012-10-09T19:02:18.147 に答える
1

使用しBigDecimal#powないでくださいMath.pow

于 2012-10-09T19:01:57.697 に答える