使用BigDecimal进行操作,使用Java进行双操作

时间:2014-02-05 13:33:58

标签: java variables double bigdecimal

我试图在java程序中使用Advogadro的编号(6.022 * 10 ^ 23),并使用BigDecimal变量来存储它。但是我想将它与int或double相乘并仍保持精度,但它会引发错误!

bad operand types for binary operator '*'
  first type:  double
  second type: BigDecimal

有没有简单的方法呢?还有一种方法可以用科学记数法打印结果吗?

提前致谢!

5 个答案:

答案 0 :(得分:2)

只支持基本类型(和字符串+)

的操作

BigDecimals已将操作实现为函数。

您只能将BigDecimals用于BigDecimals操作。所以你需要转换你的双倍值:

BigDecimal result = new BigDecimal(doubleValue).multiply(factor2);

答案 1 :(得分:1)

首先将双尾包装成BigDecimal

BigDecimal result = yourBigDecimal.multiply(new BigDecimal(yourDouble));

答案 2 :(得分:1)

BigDecimal不是原始类型。所以你真的不能将简单的数学(*, - ,+)应用到那里。它有许多方法可以支持所有的基础数学。你可以使用它们。评论建议阅读java doc(http://docs.oracle.com/javase/7/docs/api/java/math/BigDecimal.html)。

大小数是两个主要部分。一部分包含数字,第二部分包含精度。因此,如果你想处理非标准的特殊数学,你可以分别得到这两个值,并尝试使用更高的数学算法

来自java doc的退出:

  

21/110 = 0.190 //整数= 190,比例= 3

答案 3 :(得分:0)

这样做吧;

 public class Payment
 {
     BigDecimal itemCost;
     BigDecimal totalCost; // You can initialize it if you wish.

     public BigDecimal calculateCost(int itemQuantity, BigDecimal itemPrice)
     {
         itemCost  = itemPrice.multiply(new BigDecimal(itemQuantity));
         totalCost = totalCost.add(itemCost);
         return totalCost;
     }
 }

读取BigDecimal的javadoc。

答案 4 :(得分:0)

警告Unpredictability of the BigDecimal(double) constructor

新Bigdecimal(myDouble)错了。 你必须使用Bigdecimal.valueOf(myDouble)。