2012-10-09 38 views
3

我有这个简单的问题。Java将N的准确值提升为n

样品输入:

输入一个 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); 

我错过了什么?

+2

你得到了什么错误? – Colleen

+1

我认为结果太大而不适合'double'(这就是'Math.pow'返回的结果)。 –

回答

10

我错过了什么?

您使用的是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结束,作为3 以1结尾)。

+0

他截取了'218698'上的数字 –

+0

@SuzanCioc:Doh,谢谢。将编辑。 –

+0

完美的人。谢谢。! –

1

使用BigDecimal#pow不是Math.pow

2

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

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

注意,传递到BigDecimal值必须是一个String因为double没有足够的精度保持精确值。