Java Math.pow проблема - PullRequest
       7

Java Math.pow проблема

0 голосов
/ 13 декабря 2011

Я работаю над программой, которая должна кубизировать число. Короче говоря, мне нужно сравнить число со строкой, поэтому мне нужно избавиться от десятичной точки, которую двойное число дает при преобразовании в строку. Для этого я использовал Math.round и сохранил его как long. Это нормально работает для относительно обычных чисел, но число может доходить до 999 999.

Я использовал 275393 (данный тестовый номер, поэтому я предполагаю, что он должен быть правильным для проблемы, над которой я работаю), и ни калькулятор, ни компьютер, похоже, не получили правильного ответа. Правильный ответ должен содержать 123457 где-то в результатах, но в калькуляторе есть 12346 (который, я думаю, просто округляет, так как после этого он прекращает перечислять числа), а компьютер имеет 123456 (компьютер прекращает перечислять числа после этой точки). Округляет ли это проблему (не должно, потому что я уверен, что округляется только до десятого места, но кто знает)? Или это что-то еще?

Ответы [ 3 ]

6 голосов
/ 13 декабря 2011

Math.pow() занимает два double с и возвращает double. В double недостаточно точности для представления 275393 3 = 20886164356123457 (точно).

Решение заключается в использовании BigInteger.pow().

3 голосов
/ 13 декабря 2011

A double имеет ограниченную точность. Вместо этого используйте для расчетов BigInteger или BigDecimal.

1 голос
/ 13 декабря 2011

Мне нужно сравнить число со строкой, поэтому мне нужно избавиться от десятичного знака, который двойное число дает при преобразовании в строку.

Сделайте это наоборот,Преобразуйте String в число, затем сравните его с double (с небольшим допуском для учета неточных двоичных представлений чисел с плавающей запятой).

...