浮点数最多2位小数java

时间:2013-07-10 17:46:54

标签: java floating-point decimal rounding bigdecimal

我正在尝试将浮点数舍入到2位小数。

我有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

5 个答案:

答案 0 :(得分:11)

由于您使用的是BigDecimal.ROUND_HALF_UP,因此29.294998四舍五入为29.29。您可能希望改为使用BigDecimal.ROUND_UP

检查BigDecimal doc以获取有关每次舍入的更多信息。

答案 1 :(得分:3)

而不是这个

bd = bd.setScale(decimalPlace, BigDecimal.ROUND_HALF_UP);

使用

bd = bd.setScale(decimalPlace, BigDecimal.ROUND_CEILING);

关于ROUND_CEILING

  

舍入模式向正无穷大舍入。如果BigDecimal是   正面,表现为ROUND_UP;如果是否定的,则表现为   ROUND_DOWN。请注意,此舍入模式永远不会减少   计算值。

如果需要,您可以使用DecimalFormat

答案 2 :(得分:3)

由于您总是想要整理,但您想要的不是BigDecimal.ROUND_HALF_UP,而是BigDecimal.ROUND_UPBigDecimal.ROUND_CEILING

如果您希望将否定数字向下舍入(-29.294998至-29.30),请使用BigDecimal.ROUND_UP
如果您希望否定数字向上舍入(-29.294998到-29.29),请使用BigDecimal.ROUND_CEILING

对于正数,他们都会进行你正在尝试的舍入(即向上舍入)

答案 3 :(得分:1)

当您使用ROUND_HALF_UP时,您正在使用ROUND_UPROUND_HALF_UP以给定精度舍入到最接近的数字,向上舍入以打破关系(即1.235轮到1.24)

答案 4 :(得分:0)

ROUND_HALP_UP

  

舍入模式向“最近邻居”舍入,除非两个邻居都是等距的,在这种情况下向上舍入。如果丢弃的分数> = 0.5,则表现为RoundingMode.UP;否则,表现为RoundingMode.DOWN。请注意,这是学校通常教授的舍入模式。

所做的一项检查是,剩余量的下降(2 * 4998)大于除数(10000)。在这种情况下,并不是因此确定它更靠近下端。如果您尝试将29.295001舍入到ROUND_HALP_UP的29.3。