我有这个简单的问题。
示例输入:
输入一个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);
我错过了什么?
答案 0 :(得分: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);
}
}
输出:
548815620517731830194541.899025343415715973535967221869852721
(看起来您的预期值实际上是截断的......确切的值应该以1结尾,因为3 12 以1结尾。)
答案 1 :(得分:2)
在执行pow之前,您需要使用BigDecimal。例如,以下内容返回预期结果:
System.out.println(new BigDecimal("95.123").pow(12));
请注意,传递到BigDecimal
的值必须是String
,因为double
没有足够的精度来保存确切的值。
答案 2 :(得分:1)
使用BigDecimal#pow
而非Math.pow
。