我试图在java程序中使用Advogadro的编号(6.022 * 10 ^ 23),并使用BigDecimal变量来存储它。但是我想将它与int或double相乘并仍保持精度,但它会引发错误!
bad operand types for binary operator '*'
first type: double
second type: BigDecimal
有没有简单的方法呢?还有一种方法可以用科学记数法打印结果吗?
提前致谢!
答案 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)。