Java 浮点四舍五入至2位小数

Java 浮点四舍五入至2位小数,java,floating-point,decimal,rounding,bigdecimal,Java,Floating Point,Decimal,Rounding,Bigdecimal,我想把浮点数四舍五入到2位小数 我有两个浮点值: 1.985 29.294998 这两项都需要四舍五入,因此我最后得出以下结论: 1.99 29.30 当我使用以下方法时: public static Float precision(int decimalPlace, Float d) { BigDecimal bd = new BigDecimal(Float.toString(d)); bd = bd.setScale(decimalPlace, BigDecimal.

我想把浮点数四舍五入到2位小数

我有两个浮点值:

1.985
29.294998
这两项都需要四舍五入,因此我最后得出以下结论:

1.99
29.30
当我使用以下方法时:

public static Float precision(int decimalPlace, Float d) {

    BigDecimal bd = new BigDecimal(Float.toString(d));
    bd = bd.setScale(decimalPlace, BigDecimal.ROUND_HALF_UP);
    return bd.floatValue();
  }
结果是:

1.99
29.29
而不是这个

bd=bd.setScale(小数位数、大小数位数、四舍五入半向上)

使用

bd=bd.setScale(小数位数、大小数位数、圆形天花板)

关于圆顶

舍入模式可向正无穷大舍入。如果大十进制是 正向,表现为向上取整;如果为负值,则表现为for 把你打倒。请注意,此舍入模式不会降低 计算值


如果需要,您可以使用
DecimalFormat

因为您使用的是
BigDecimal。向上取整
29.294998
四舍五入为
29.29
。您可能需要使用
BigDecimal。取而代之的是将
四舍五入


查看关于每个舍入的更多信息。

因为您总是想舍入,所以您想要的不是而是取而代之的或

如果希望负数向下舍入(-29.294998到-29.30),请使用此选项。
如果要将负数四舍五入(-29.294998到-29.29),请使用


对于正数,它们都将执行您尝试执行的舍入操作(即向上舍入)

您正在使用的
向上舍入半个
,而此时您应该使用
向上舍入
<编码>对半舍五入
以给定的精度对最接近的数字进行舍入,舍入以打破束缚(即1.235舍五入到1.24)

对半舍五入

舍入模式向“最近邻居”舍入,除非两个邻居距离相等,在这种情况下舍入。如果丢弃的分数大于等于0.5,则其行为与RoundingMode.UP相同;否则,其行为与RoundingMode.DOWN相同。请注意,这是学校普遍教授的舍入模式


所做的检查之一是正在删除的余数(2*4998)的大小是否大于除数(10000)。在这种情况下,并非如此,它决定更接近低端。如果您尝试29.295001,则四舍五入到29.3以进行四舍五入暂停。

浮点不是存储十进制数的有效方法。无论何时,当您想要跟踪具有特定小数位数的数字时,它们都应保持为
BigDecimal
,而不是转换回
float
。如果您想要小数位数,请使用小数基数。浮点没有小数步数。