如何使用BigDecimal进行正确的除法运算

62

我的代码示例:

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

我做错了什么?


1
很抱歉使用Lorem ipsum,但是如果不加上它,“问题太短”无法发布。 - Jan Ajan
你的结果是正确的。四舍五入到最近的整数,如果遇到平局则向上取整,一个三分之一确实是一个扁平的、圆形的零。 - Marko Topolnik
那么如果我需要0.33333333怎么办?我需要将1除以3吗? - Jan Ajan
4
Jan,你在这个案例中将比例指定为8。a.divide(b, 8, BigDecimal.ROUND_HALF_UP); - Rohan Grover
2个回答

100

你还没有为结果指定比例。请尝试以下操作:

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文档:链接
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文档


我的帖子中的链接是1.5 API。divide(BigDecimal divisor, int scale, int roundingMode) 已经存在一段时间了,我相信。 - Rohan Grover
1
divide(BigDecimal divisor, int roundingMode) 已被标记为 @Deprecated(since="9")。 - Jay Ehsaniara

0
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

你能否举个例子说明脚本产生了什么,以及它应该产生什么?如果没有答案,它会崩溃吗?请尝试展示你已经尝试过的内容,以及你认为错误出现的位置。 - c8999c 3f964f64
您的回答可以通过提供更多支持信息来完善。请[编辑]以添加进一步的细节,例如引用或文档,以便他人可以确认您的回答正确无误。您可以在帮助中心找到有关如何撰写良好答案的更多信息。 - Community
这并不真正回答问题。如果您有不同的问题,可以通过点击提问来提出。为了在该问题获得新回答时得到通知,您可以关注此问题。一旦您拥有足够的 声望,您还可以添加悬赏以吸引更多关注该问题。- 来自审核 - Clint

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接