Java获取从N到N的精确值

Java获取从N到N的精确值,java,bigdecimal,Java,Bigdecimal,我有一个简单的问题 样本输入: 输入一 95.123 输入两个12 将第一个输入提高到第二个输入必须给出功率的精确值。 这样:548815620517731830194541.89902534344157159735359672218698 我弄不好 以下是我迄今为止所做的工作。我想我错过了什么 System.out.println("Input One"); Scanner scanner = new Scanner(System.in); Double inputOne = scanner.

我有一个简单的问题

样本输入:

输入一
95.123

输入两个
12

将第一个输入提高到第二个输入必须给出功率的精确值。 这样:
548815620517731830194541.89902534344157159735359672218698

我弄不好

以下是我迄今为止所做的工作。我想我错过了什么

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
构造函数传递一个字符串,然后进行计算

示例代码:

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结尾。)

使用
BigDecimal\pow
而不是
Math.pow

在执行pow之前,您需要使用BigDecimal。例如,以下内容返回预期结果:

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

注意,传递到
BigDecimal
的值必须是
字符串,因为
double
没有足够的精度来保存精确的值。

我认为结果太大,无法放入
double
(这就是
Math.pow
返回的值)。他截断了
218698