Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Непонятки с округлением до 2-х знаков значений, в которых с третьей дробной цифры идут "9" / 6 сообщений из 6, страница 1 из 1
15.05.2013, 15:54:23
    #38258636
ozzmosis
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Непонятки с округлением до 2-х знаков значений, в которых с третьей дробной цифры идут "9"
Товарищи... я офигеваю как-то уже... :-/
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
import java.math.*;
import java.text.*;
class FloatMathTest {
    public static void main(String[] args) {
        double r = 1418.90 * 5 / 100; // точное значение = 70.944(9)....
        DecimalFormat df = new DecimalFormat("#.00");
        System.out.println(df.format(r));
        
        BigDecimal bd = new BigDecimal(String.valueOf(r)).setScale(2, BigDecimal.ROUND_HALF_UP);
        System.out.println(bd);
    }
}

Output:
Код: plaintext
1.
70,94
70.95

Правильный ответ - второй (по кр. мере, в экселе и на обычном буховском калькуляторе "Касио" - тоже 70.95).
Почему врёт df.format ? И откудова, кстати, он берёт сепаратор = ",", если я ему задал точку ?

Как вообще положено округлять в яве такие "спецчисла", чтобы не было расхождений "в одну копейку" ?
...
Рейтинг: 0 / 0
15.05.2013, 16:05:38
    #38258676
ivanra
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Непонятки с округлением до 2-х знаков значений, в которых с третьей дробной цифры идут "9"
Скорее всего, бухгалтерские калькуляторы используют BigDecimal.ROUND_HALF_EVEN - для минимизации статистической ошибки
...
Рейтинг: 0 / 0
15.05.2013, 16:06:05
    #38258678
Usman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Непонятки с округлением до 2-х знаков значений, в которых с третьей дробной цифры идут "9"
ozzmosis,

Код: java
1.
2.
3.
DecimalFormat df = new DecimalFormat("#.00");
df.setRoundingMode(RoundingMode.CEILING);
System.out.println(df.format(r));
...
Рейтинг: 0 / 0
15.05.2013, 16:09:00
    #38258696
ivanra
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Непонятки с округлением до 2-х знаков значений, в которых с третьей дробной цифры идут "9"
А точку надо задавать так:
Код: java
1.
2.
3.
DecimalFormatSymbols dfs = df.getDecimalFormatSymbols();
dfs.setDecimalSeparator('.');
df.setDecimalFormatSymbols(dfs);
...
Рейтинг: 0 / 0
15.05.2013, 16:11:39
    #38258704
ozzmosis
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Непонятки с округлением до 2-х знаков значений, в которых с третьей дробной цифры идут "9"
Usman,

спс.
...
Рейтинг: 0 / 0
15.05.2013, 16:12:01
    #38258705
ozzmosis
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Непонятки с округлением до 2-х знаков значений, в которых с третьей дробной цифры идут "9"
ivanra,

тоже спс :-)
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Непонятки с округлением до 2-х знаков значений, в которых с третьей дробной цифры идут "9" / 6 сообщений из 6, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]