将Bigdecimal和int相乘产生错误



我有一个像0.0004的值,当我将其存储在Integer中时,它将转换为Exponential格式,所以我使用Bigdecimal将其转换为正常值,如

 Bigdecimal x=BigDecimal.valueOf(0.0004)

现在我试图乘以x*100,但我得到低于错误。

Error: The operator * is undefined for the argument type(s) BigDecimal, int

因为这个错误,如果我再次使用这个而不使用bigdecimal,它将转换为EXponential

谁能告诉我Bigdecimal and int乘法的方法?

搜索了很多,但没有找到正确的解决方案。

感谢您的宝贵时间

您可以使用BigDecimal.multiply乘以BigDecimal

但是,0.0004 * 100的int值将是0,这可能不是您想要的。

最后,您可以通过使用NumberFormat实例并格式化Number来更改BigDecimal以小数表示的方式。

下面是一个例子:

BigDecimal x= BigDecimal.valueOf(0.0004);
BigDecimal y = x.multiply(new BigDecimal("100"));
int z = y.intValue();
System.out.printf("y is %stz is %d%n", y, z);
// edit to truncate fractional digits
NumberFormat nf = NumberFormat.getInstance();
nf.setMaximumFractionDigits(2);
System.out.printf("y (2 fraction digits) is %s", nf.format(y));

y is 0.04000    z is 0
y (2 fraction digits) is 0.04

BigDecimal 's是对象。它们没有正常的操作符。

您需要在BigDecimal:

中调用multiply方法,而不是像x*10这样的普通乘法运算符。
x = x.multiply(new BigDecimal(10));

如果你想把它存储在一个新值中:

BigDecimal n = x.multiply(new BigDecimal(10));

并将其转换为原语:

double d = n.doubleValue();
int i = n.intValue();

然而,如果你试图使用小数,为什么不直接使用双精度:

double x = 0.0004;
double n = x*100;

最新更新