繁体   English   中英

Java中使用BigDecimal和double进行的操作

[英]Operations with BigDecimal and double in Java

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

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

有没有简单的方法可以做到这一点? 还可以用科学计数法打印结果吗?

提前致谢!

仅原始类型支持操作(字符串支持+)

BigDecimals已将操作实现为函数。

您只能将BigDecimals用于BigDecimals的操作。 因此,您需要转换您的double值:

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

首先将双BigDecimal包装为BigDecimal

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

BigDecimal不是原始类型。 因此,您真的不能在其中应用简单的数学(*,-,+)。 为了支持所有基本数学,它有很多方法。 您可以使用它们。 作为注释建议,请阅读Java文档( http://docs.oracle.com/javase/7/docs/api/java/math/BigDecimal.html )。

大十进制有两个主要部分。 一部分包含数字,第二部分包含精度。 因此,如果您要处理非标准的特殊数学运算,则可以分别获取这两个值并尝试使用更高的数学算法

引用java doc:

21/110 = 0.190 //整数= 190,小数位数= 3

像这样

 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;
     }
 }

并阅读Bigdocimal的javadoc。

警告BigDecimal(double)构造函数的不可预测性

new Bigdecimal(myDouble)是错误的。 您必须改用Bigdecimal.valueOf(myDouble)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM