我正在使用 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。为什么是这样?如何避免四舍五入到百分之几?
谢谢!
最佳答案
您似乎需要比 float 更高的精度来表示该数字。
将格式化程序从图片中删除:
Float.parseFloat("177687.71");
177687.7 // Ouch
Double.parseDouble("177687.71");
177687.71 // Ok
看来您需要使用 double 。
如果这是为了代表金钱,尽管正如 @Dawood 所建议的那样,那么是的,不要使用 float 类型来代表金钱,因为它们是估计值,并且会随着时间的推移累积错误。像 BigDecimal 这样的格式会更合适,甚至只存储代表分的整数。金钱不是您想要遭受舍入误差的东西。
关于Java DecimalFormat 向下舍入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52248168/