Java将N的精确值从n提升到n

Joe*_*ito 3 java bigdecimal

我有这个简单的问题.

样本输入:

输入一个 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);
Run Code Online (Sandbox Code Playgroud)

我错过了什么?

Jon*_*eet 10

我错过了什么?

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

只需将字符串传递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);
    }
}
Run Code Online (Sandbox Code Playgroud)

输出:

548815620517731830194541.899025343415715973535967221869852721
Run Code Online (Sandbox Code Playgroud)

(看起来您的预期值实际上是截断的......确切的值应该以1结尾,因为3 12结束于1)