Java 十进制向上取整的奇数结果
提供一个浮点值Java 十进制向上取整的奇数结果,java,floating-point,floating-point-conversion,Java,Floating Point,Floating Point Conversion,提供一个浮点值37.35我得到一个字符串37.3 这是我的密码 DecimalFormat format = new DecimalFormat(".0"); format.setRoundingMode(RoundingMode.HALF_UP); return format.format(37.35f); 我希望收到一个字符串37.4。我做错了什么 我认为这可能是因为传入了一个浮点,但是我没有选择接收的变量类型。即使浮动的实际表示为37.35002121505154也应向上取整 将此值格式
37.35
我得到一个字符串37.3
这是我的密码
DecimalFormat format = new DecimalFormat(".0");
format.setRoundingMode(RoundingMode.HALF_UP);
return format.format(37.35f);
我希望收到一个字符串37.4
。我做错了什么
我认为这可能是因为传入了一个浮点,但是我没有选择接收的变量类型。即使浮动
的实际表示为37.35002121505154
也应向上取整
将此值格式化为字符串的整个要点是,我可以将其传递到
bigdecimic
,并获得准确的值,例如37.4
37.35实际上更接近37.3,然后是37.4。您可以使用以下代码进行检查:
System.out.println(37.35f-37.3f);
System.out.println(37.4f-37.35f);
打印0.049999237
和0.05000305
对于double
数据类型,结果是不同的
要解决这个问题,只需在数字上加一点增量。例如,0.01。这个问题是由于计算机浮点运算中浮点数据类型的精度造成的。正如@Zefick在他的回答中所显示的,37.35 like float的表示实际上更接近于37.3而不是37.4;因为它略低于37.35 使用双精度解决了这个问题,但由于这是一个限制,我建议使用包装器:
return format.format(Double.valueOf(String.valueOf(37.35f)));
请务必在Java中使用BigDecimal类!它有一个方法来取整并获得你想要的格式,比如字符串、双精度等。最重要的是,使用这个类时不要失去精度!