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

person leigero    schedule 13.08.2013    source источник
comment
вторая строка 6 ^ 1, и она выводит 6 просто отлично   -  person SoWhat    schedule 13.08.2013
comment
Да, поэтому вопрос в том, почему он дает мне 54 в строке выше, когда значения внутри также равны 6 и 1.   -  person leigero    schedule 13.08.2013
comment
это также поможет лучше, если вы загрузите содержимое вашего файла   -  person SoWhat    schedule 13.08.2013


Ответы (3)


Я думаю, что основное заблуждение здесь заключается в том, что '6' != 6 Если бы они были одинаковыми, вам не нужно было бы иметь разные литералы. Вместо этого ASCII для '6' будет (int) '6' или 54.

введите здесь описание изображения

person Peter Lawrey    schedule 13.08.2013

Это потому, что значение ascii символа 6 равно 54. Теперь проверьте свой код:

Math.pow(numbers.charAt(i)
person Juned Ahsan    schedule 13.08.2013
comment
@leigero np, просто примите ответ, если он покажется вам полезным. Практика принятия ответов помогает другим, столкнувшимся с той же проблемой. - person Juned Ahsan; 13.08.2013

Здесь numbers.charAt(i) возвращает char '6', а НЕ int 6.

значение char '6' в ASCII представляет собой целочисленное значение 54. «0» — это 48, «1» — это 49 и т. д.

Просто сбросьте отсчет с цифры 0.

Math.pow(numbers.charAt(i) - '0', numbers.length());
person Lokesh    schedule 13.08.2013