Почему Java показывает дополнительные значения после вычисления с плавающей запятой? - PullRequest
0 голосов
/ 05 августа 2011

У меня есть очень простой фрагмент кода, который, по-моему, дает неправильный результат с точки зрения пользователя.

package com.test.sample;
public class Test {

    public static void main(String[] args) {
        float c,d;

        c = (float) 12.47;
        d = (float) 12.44;
        d = c - d;

        System.out.println("Hello the calculated value of a=" + d);
    }

}

Выход Hello the calculated value of a=0.030000687

Но я хочу a=0.030000000, что является идеальным значением.

1 Ответ

6 голосов
/ 05 августа 2011

Арифметика с плавающей точкой , что должны знать разработчики.

В JVM реализован стандарт IEEE-754 1985 с плавающей запятой , и у него есть проблема точности (поскольку числа с плавающей запятой не могут точно представлять все действительные числа).

Если вы ищете точность, вместо этого используйте объект java.math.BigDecimal.


Обновление: Вот как я взял ваш пример и использовал BigDecimal для достижения вашего ожидаемого результата:

import java.math.BigDecimal;

/**
 * @author The Elite Gentleman
 *
 */
public class BigDecimalTest {

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        BigDecimal a = new BigDecimal(Float.toString(12.47f));
        BigDecimal b = new BigDecimal(Float.toString(12.44f));
        BigDecimal c = a.subtract(b);
        System.out.println(c);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...