Java DecimalFormat округление вниз - PullRequest
0 голосов
/ 09 сентября 2018

Я использую DecimalFormatter для чтения в форматированных значениях десятичной строки и преобразования их в число с плавающей точкой.Однако, когда я запускаю:

    DecimalFormat formatter = new DecimalFormat("####,####.00");
    String floatStr = "177,687.71";
    float val1 = formatter.parse(floatStr).floatValue();
    System.out.println(val1);

... я получаю 177678,7 вместо 177678,71.Почему это?Как избежать округления до сотого места?

Спасибо!

1 Ответ

0 голосов
/ 09 сентября 2018

Вам нужно больше точности, чем число с плавающей точкой, чтобы представить это число.

Удаление форматера из картинки:

Float.parseFloat("177687.71");
177687.7 // Ouch

Double.parseDouble("177687.71");
177687.71 // Ok

Похоже, вам вместо этого нужно использовать double.

Если это для представления денег, хотя, как предлагает @Dawood, то да, не используйте плавающие типы для представления денег, поскольку они являются оценками и со временем будут накапливать ошибки. Такой формат, как BigDecimal, будет более подходящим, или даже просто хранит целое число, представляющее центы. Деньги - это не то, что вы хотите подвергнуть ошибкам округления.

...