Проблема расчета в Java - PullRequest
7 голосов
/ 03 июня 2011

У меня небольшие трудности с выполнением вычислений на Java.Вот что я пытаюсь сделать -

((0.053800 * (500000/1000)) + 4) * 0.85

В моем Java-приложении возвращается 26.264999999999997, который, если вы округлите до 2 десятичных знаков, станет 26.26.

Но в MS Excel та же формула возвращает 26.265000 .. и поэтому округленный результат равен 26.27.

Если мое приложение Java возвращает неправильное значение, что я могу сделать, чтобы исправить его?

Ответы [ 2 ]

6 голосов
/ 03 июня 2011

См. мой ответ здесь для объяснения того, что происходит.

4 голосов
/ 03 июня 2011

Следующее является намного лучшим приближением, которое в данном случае приводит к тому же значению:

import java.math.BigDecimal;
import java.math.MathContext;

public class Test {
    public static void main(String[] args) {
        //double d = ((0.053800 * (500000/1000)) + 4) * 0.85;
        BigDecimal d = ((new BigDecimal(0.053800).multiply(new BigDecimal(500000).divide(new BigDecimal(1000)))).add(new BigDecimal(4))).multiply(new BigDecimal(0.85));
        System.out.println(d.round(MathContext.DECIMAL32));
    }
}
...