Java DecimalFormat 向下舍入
Java DecimalFormat rounding down
我正在使用 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。为什么是这样?如何避免四舍五入?
谢谢!
您似乎需要比浮点数更高的精度来表示该数字。
从图片中取出格式化程序:
Float.parseFloat("177687.71");
177687.7 // Ouch
Double.parseDouble("177687.71");
177687.71 // Ok
看来您需要改用双精度数。
如果正如@Dawood 所建议的那样,这是为了表示金钱,那么是的,不要使用浮动类型来表示金钱,因为它们是估计值,并且会随着时间的推移累积错误。像 BigDecimal 这样的格式会更合适,或者甚至只存储一个表示美分的整数。金钱不是您希望出现舍入误差的东西。
我正在使用 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。为什么是这样?如何避免四舍五入?
谢谢!
您似乎需要比浮点数更高的精度来表示该数字。
从图片中取出格式化程序:
Float.parseFloat("177687.71");
177687.7 // Ouch
Double.parseDouble("177687.71");
177687.71 // Ok
看来您需要改用双精度数。
如果正如@Dawood 所建议的那样,这是为了表示金钱,那么是的,不要使用浮动类型来表示金钱,因为它们是估计值,并且会随着时间的推移累积错误。像 BigDecimal 这样的格式会更合适,或者甚至只存储一个表示美分的整数。金钱不是您希望出现舍入误差的东西。