为了账号安全,请及时绑定邮箱和手机立即绑定

Java DecimalFormat 向下舍入

Java DecimalFormat 向下舍入

皈依舞 2021-09-12 10:20:54
我正在使用 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 回答

?
qq_花开花谢_0

TA贡献1835条经验 获得超7个赞

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


从图片中取出格式化程序:


Float.parseFloat("177687.71");

177687.7 // Ouch


Double.parseDouble("177687.71");

177687.71 // Ok

看来您需要使用 double 来代替。


如果这是为了表示金钱,但正如@Dawood 所建议的那样,那么是的,不要使用浮动类型来表示金钱,因为它们是估计值并且会随着时间的推移累积错误。像 BigDecimal 这样的格式会更合适,或者甚至只是存储一个表示美分的整数。金钱不是您想要受四舍五入错误影响的东西。


查看完整回答
反对 回复 2021-09-12
  • 1 回答
  • 0 关注
  • 210 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信