Java DecimalFormat 向下舍入

标签 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。为什么是这样?如何避免四舍五入到百分之几?

谢谢!

最佳答案

您似乎需要比 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/

相关文章:

java - Java 的 UUID.randomUUID 有多好?

java - 如何在不破坏其余部分的情况下编辑属性文件

java - 消极模式有什么用?

java - DecimalFormatSymbols.getInstance().getDecimalSeparator() 将输出返回为 ',' 44 而不是 ','

java - 如何使用 DecimalFormat 仅隐藏数字 "with decimals"中的尾随零

java - 我可以在非 EE 独立环境中使用 JPA 注释吗?

java - X-B3-SpanId 常量在哪里定义?

java - 我应该定期重新播种 SecureRandom 还是自动发生?

java - 如何使用 DecimalFormat 将数字移动 4 位小数