我使用DecimalFormatter读取格式化的十进制字符串值,并将它们转换为浮点数。但是,当我运行时:
DecimalFormat formatter = new DecimalFormat("####,####.00");
String floatStr = "177,687.71";
float val1 = formatter.parse(floatStr).floatValue();
System.out.println(val1);...I获得177678.7而不是177678.71。为什么会这样呢?我怎样才能避免绕行百分之一的地方?
谢谢!
发布于 2018-09-09 19:58:16
您似乎需要比浮点数更高的精度来表示该数字。
将格式化程序从图片中取出:
Float.parseFloat("177687.71");
177687.7 // Ouch
Double.parseDouble("177687.71");
177687.71 // Ok看来你需要用双倍代替。
如果这是为了像@Dawood建议的那样代表货币,那么是的,不要使用浮动类型来表示货币,因为它们是估计值,并且会随着时间的推移积累错误。像BigDecimal这样的格式更合适,甚至只是存储一个代表美分的整数。金钱不是你想要受到舍入错误的东西。
https://stackoverflow.com/questions/52248168
复制相似问题