Java DecimalFormat四舍五入

时间:2018-09-09 19:51:43

标签: java decimalformat

我正在使用DecimalFormatter读取格式化的十进制字符串值,并将它们转换为float。但是,当我运行时:

    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 :(得分:3)

您似乎需要比浮点数更高的精度来表示该数字。

将格式化程序移出图片:

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

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

似乎您需要使用双精度符号。

如果这是@Dawood建议的,但它是用于表示货币,则可以,不要使用浮点类型来表示货币,因为它们是估计值,并且会随着时间的推移而累积误差。像BigDecimal这样的格式会更合适,甚至只存储代表美分的整数。金钱不是您要舍入错误的内容。