我有这个简单的问题。

输入样例:

输入一95.123
输入两个12
将第一个输入提升到第二个输入必须提供准确的功率值。
像这样: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);

我错过了什么?

最佳答案

我错过了什么?

您使用的是double开头,而double不能完全代表95.123。然后,您将Math.pow与双精度值一起使用,这将进一步降低精度。将已经有损的值转换为高精度值是没有意义的……它无法神奇地恢复数据。

只需将字符串传递给第一个参数的BigDecimal构造函数,然后传递 BigDecimal.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

(看起来您的期望值实际上被截断了……确切的值肯定应该以1结尾,因为312以1结尾。)

10-08 16:20