Java中使用BigDecimal和double的操作

Java中使用BigDecimal和double的操作,java,variables,double,bigdecimal,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 有什么简单的方法可以做到这一点吗?还有没有办法用科学记数法打印结果 提前谢谢 操作仅支持基本类型(和+用于字符串) B

我试图在java程序中使用Advogadro的数字(6.022*10^23),并使用BigDecimal变量来存储它。但是我想用一个int或double乘以它,并且仍然保持精度,但是它会抛出一个错误

bad operand types for binary operator '*'
  first type:  double
  second type: BigDecimal
有什么简单的方法可以做到这一点吗?还有没有办法用科学记数法打印结果


提前谢谢

操作仅支持基本类型(和+用于字符串)

BigDecimals已将这些操作作为函数实现

对于具有大小数的操作,只能使用大小数。因此,您需要转换双精度值:

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

仅对基元类型支持操作(对字符串支持+操作)

BigDecimals已将这些操作作为函数实现

对于具有大小数的操作,只能使用大小数。因此,您需要转换双精度值:

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

首先将双精度包装成一个
BigDecimal

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

首先将双精度包装成一个
BigDecimal

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

BigDecimal不是基元类型。所以你真的不能把简单的数学(*,-,+)应用到这里面。它有很多方法来支持所有的基础数学。你可以使用它们。如注释所示,阅读java文档()

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

来自java文档的四分之一:

21/110=0.190//整数=190,刻度=3


BigDecimal不是基元类型。所以你真的不能把简单的数学(*,-,+)应用到这里面。它有很多方法来支持所有的基础数学。你可以使用它们。如注释所示,阅读java文档()

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

来自java文档的四分之一:

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;
     }
 }
阅读javadoc中的BigDecimal。

像这样做sthg

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

并阅读javadoc中的BigDecimal。

警告:

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

警告

新的Bigdecimal(myDouble)错误。
您必须使用Bigdecimal.valueOf(myDouble)。

您阅读过关于Bigdecimal的javadoc吗?请提供您的代码如何操作itAvogadro的数字已知精度为5.0×10–8(),因此它可以由
double
类型完美表示,无需使用
Bigdecimal
。抱歉,但是Java中没有运算符重载。试图“保持精度”的目的是什么?double携带53个有效位,约15.9个有效位。已知阿伏伽德罗常数约为8位有效数字。对于合理的数值稳定计算,测量误差远远超过双精度舍入误差。6.022e23是测量值的4位有效数字近似值。通过使用该近似值,您选择接受的舍入误差甚至会使测量误差相形见绌。您阅读过javadoc for BigDecimal吗?请提供您的代码如何操作itAvogadro的数字已知精度为5.0×10–8(),因此它可以用
double
类型完美表示,无需使用
BigDecimal
。抱歉,但是Java中没有运算符重载。试图“保持精度”的目的是什么?double携带53个有效位,约15.9个有效位。已知阿伏伽德罗常数约为8位有效数字。对于合理的数值稳定计算,测量误差远远超过双精度舍入误差。6.022e23是测量值的4位有效数字近似值。通过使用该近似值,您选择接受的舍入误差甚至会使测量误差相形见绌。好的,但是如果我想将其应用于某个较大的问题,例如公式,我必须这样做:bigdecime result=new bigdecimic(doubleValue)。乘(factor2)。除(factor3)。加(5.7);(例如)@AngeloUknown除非你真的需要比double允许的精度更高,这在涉及物理测量量的计算中是不常见的,你最好只使用double和中缀运算符。好的,但是如果我想把它应用到一些大的东西上,像公式一样,我必须这样做:BigDecimal结果=新的BigDecimal(doubleValue)。乘(factor2)。除(factor3)。加(5.7);(例如)@AngeloUknown除非您确实需要比double允许的精度更高的精度(这在涉及物理测量量的计算中是不常见的),否则您最好只使用double和中缀运算符。