【问题标题】:How to round BigDecimal smaller than 1如何将 BigDecimal 舍入小于 1
【发布时间】:2015-08-10 20:17:56
【问题描述】:

我想将十进制数四舍五入到最接近的自然数。 示例:

public static void main(String[] arguments){
    BigDecimal a=new BigDecimal("2.5");
    BigDecimal b=new BigDecimal("0.5");
    System.out.println(a.round(new MathContext(1,RoundingMode.UP)));
    System.out.println(b.round(new MathContext(1,RoundingMode.UP)));       
    }

预期输出

3
1

实际输出

3
0.5

问题是数字 0.5 舍入为 0.5 而不是 1 如何舍入小于 1 的 BigDecimal

【问题讨论】:

  • 这是bug还是什么,还在想intvalue = intvalue.setScale(0, RoundingMode.UP);效果很好
  • 是的,setScale(0) 有效,但我不知道为什么 BigDecimal 回合方法会如此有效。

标签: java rounding bigdecimal


【解决方案1】:

这会做你想做的......

BigDecimal a=new BigDecimal("2.5");
BigDecimal b=new BigDecimal("0.5");
System.out.println(Math.round(a.doubleValue()));
System.out.println(Math.round(b.doubleValue()));

这会给你输出3 and 1 ...

【讨论】:

  • 这也会给他 3 的输入 2.1
  • @ZaidMalhis 谢谢...更新了我的答案
  • 但 double 不能准确存储大部分 BigDecimal 值
【解决方案2】:

类似:

 BigDecimal intvalue= new BigDecimal("0.5");
 intvalue =  intvalue.setScale(0, RoundingMode.HALF_UP);

【讨论】:

  • @JishnuPrathap 仅当您希望 0.3 也舍入为 1 时。 HALF_UP 通常更安全。
  • @Pshemo OP 在他的问题中使用了 RoundingMode.UP,而 HALF_UP 和 UP 用于不同的目的。它们只是不同而不是更安全或其他东西
  • @JishnuPrathap 你是对的,我的错。我在示例0.5 中看到过,尽管那个 OP 意味着半舍入。再次抱歉,造成混淆。
【解决方案3】:
BigDecimal b=new BigDecimal("0.5");
b = b.setScale(0,BigDecimal.ROUND_HALF_UP);
System.out.println(b.round(MathContext.DECIMAL32));  

【讨论】:

    【解决方案4】:

    您可以使用以下代码将 BigDecimal 舍入小于 1。

        BigDecimal a = new BigDecimal("2.5");
        BigDecimal b = new BigDecimal("0.5");
    
        System.out.println(a.setScale(0, RoundingMode.UP));
        System.out.println(b.setScale(0, RoundingMode.UP));
    

    【讨论】:

      【解决方案5】:
      System.out.println(Math.round(b.doubleValue()));
      

      【讨论】:

      • 你是问还是说?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多