Java的Math.pow()在简单的情况下产生奇怪的结果

时间:2013-08-13 07:28:52

标签: java math pow

我正在尝试做一个简单的编程挑战,而且我在使用Math.pow()函数时遇到了一个奇怪且无关的问题。

我得到6的1的幂是54?

我正在读取在命令行输入的文件(通过args [0])。该文件只包含三个数字:

6
75
153

我正在运行的程序如下:

public static void main (String[] args)throws IOException{

    File filename = new File(args[0]);
    Scanner file = new Scanner(filename);

    while(file.hasNextLine()){
        String numbers = file.nextLine();
        int numValue = Integer.parseInt(numbers);

        int sumOfPowers = 0;

        for(int i = 0; i < numbers.length(); i++){
            sumOfPowers += Math.pow(numbers.charAt(i), numbers.length());
            System.out.println(Math.pow(numbers.charAt(i), numbers.length()));
            System.out.println(Math.pow(6, 1));
        }

    }
    file.close();
}

这产生的输出是奇数。基于这些类型的值创建幂函数是否违反Java规则?

输出我得到:

54.0
6.0
3025.0
6.0
2809.0
6.0
117649.0
6.0
148877.0
6.0
132651.0
6.0

3 个答案:

答案 0 :(得分:8)

我认为这里的主要误解是'6'!= 6如果它们是相同的,你将不需要有不同的文字。相反,'6'的ASCII为(int) '6'54

enter image description here

答案 1 :(得分:3)

这是因为字符6的ascii值为54.现在检查您的代码:

Math.pow(numbers.charAt(i)

答案 2 :(得分:1)

此处numbers.charAt(i)会返回char '6'而非int 6

ASCII中char '6'的值是整数值54。 '0'是48,'1'是49,依此类推。

只需从数字0重置计数。

Math.pow(numbers.charAt(i) - '0', numbers.length());