Java十进制格式向下舍入

Java十进制格式向下舍入,java,decimalformat,Java,Decimalformat,我使用DecimalFormatter读取格式化的十进制字符串值并将其转换为浮点值。但是,当我跑步时: DecimalFormat formatter = new DecimalFormat("####,####.00"); String floatStr = "177,687.71"; float val1 = formatter.parse(floatStr).floatValue(); System.out.println(val1); …我得到的是177

我使用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这样的格式更合适,甚至只存储表示美分的整数。金钱并不是你想受到舍入误差影响的东西

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

从图片中删除格式化程序:

Float.parseFloat("177687.71");
177687.7 // Ouch

Double.parseDouble("177687.71");
177687.71 // Ok
看来你需要用双人床来代替


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

请不要使用
float
double
来存储精确的十进制值。这看起来像一笔钱——那么我可以建议使用
BigDecimal
类型吗?为了回答您的问题,
float
通常只能精确到大约7位有效数字。请不要使用
float
double
来存储精确的十进制值。这看起来像一笔钱——那么我可以建议使用
BigDecimal
类型吗?为了回答您的问题,
float
通常只能精确到大约7位有效数字。