【问题标题】:How can I divide properly using BigDecimal如何使用 BigDecimal 正确划分
【发布时间】:2012-05-17 14:03:58
【问题描述】:

我的代码示例:

import java.math.*; 

public class x
{
  public static void main(String[] args)
  {
    BigDecimal a = new BigDecimal("1");
    BigDecimal b = new BigDecimal("3");
    BigDecimal c = a.divide(b, BigDecimal.ROUND_HALF_UP);
    System.out.println(a+"/"+b+" = "+c);
  }
}

结果是: 1/3 = 0

我做错了什么?

【问题讨论】:

  • 对 Lorem ipsum 感到抱歉,但它不允许我在没有它的情况下发帖,因为“问题太短了”。
  • 你的结果是正确的。三分之一,四舍五入到最接近的整数,通过四舍五入打破平局,确实是一个平坦的零舍入。
  • 如果我需要 0.33333333?我如何将 1 除以 3?
  • Jan,您为您的案例指定比例为 8。 a.divide(b,8, BigDecimal.ROUND_HALF_UP);

标签: java bigdecimal


【解决方案1】:

您尚未指定结果的比例。请试试这个

2019 年编辑:更新了 JDK 13 的答案。因为希望您现在已经迁移出 JDK 1.5。

import java.math.BigDecimal;
import java.math.RoundingMode;

public class Main {

    public static void main(String[] args) {
        BigDecimal a = new BigDecimal("1");
        BigDecimal b = new BigDecimal("3");
        BigDecimal c = a.divide(b, 2, RoundingMode.HALF_UP);
        System.out.println(a + "/" + b + " = " + c);
    }

}

请阅读JDK 13 文档。

JDK 1.5 的旧答案

import java.math.*; 

    public class x
    {
      public static void main(String[] args)
      {
        BigDecimal a = new BigDecimal("1");
        BigDecimal b = new BigDecimal("3");
        BigDecimal c = a.divide(b,2, BigDecimal.ROUND_HALF_UP);
        System.out.println(a+"/"+b+" = "+c);
      }
    }

这将使结果为 0.33。请阅读API

【讨论】:

  • Jan 我帖子中的链接是针对 1.5 API 的。我相信,divide(BigDecimal divisor, int scale,int roundingMode) 已经存在了一段时间了。
  • divide(BigDecimal divisor, int roundingMode) 是 @Deprecated(since="9")
【解决方案2】:
import java.math.*;
class Main{
   public static void main(String[] args) {

      // create 3 BigDecimal objects
      BigDecimal bg1, bg2, bg3;
      MathContext mc=new MathContext(10,RoundingMode.DOWN);

      bg1 = new BigDecimal("2.4",mc);
      bg2 = new BigDecimal("32301",mc);

      bg3 = bg1.divide(bg2,mc); // divide bg1 with bg2

      String str = "Division result is " +bg3;

      // print bg3 value
      System.out.println( str );
   }
}

giving wrong answer

【讨论】:

  • 你能举例说明脚本产生了什么,以及它应该产生什么吗?它会在没有答案的情况下崩溃吗?试着展示你到目前为止所做的尝试,以及你认为错误在哪里。
  • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
猜你喜欢
  • 2013-12-25
  • 1970-01-01
  • 2021-12-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-28
  • 2011-10-25
  • 1970-01-01
相关资源
最近更新 更多