Java 用大小数计算百分比

Java 用大小数计算百分比,java,bigdecimal,Java,Bigdecimal,我想计算以BigDecimal格式接收的数字的大小: BigDecimal number1 = new BigDecimal("17"); int percentage = 50; BigDecimal percentageAmount = number1.multiply(new BigDecimal(percentage/100)); 但是我得了0分 将分割的结果强制转换为double。整数除法按预期返回零。这应该行得通 BigDecimal percentageAmount = numb

我想计算以BigDecimal格式接收的数字的大小:

BigDecimal number1 = new BigDecimal("17");
int percentage = 50;
BigDecimal percentageAmount = number1.multiply(new BigDecimal(percentage/100));

但是我得了0分

将分割的结果强制转换为
double
。整数除法按预期返回零。这应该行得通

BigDecimal percentageAmount = number1.multiply(new BigDecimal((double)percentage/100));
或者,将值设为100到100.0

BigDecimal percentageAmount = number1.multiply(new BigDecimal(percentage/100.0));
如果数量像您使用的那样少,这些解决方案将起作用。但当数字很大时,这些解决方案不会给出精确的结果。这将是避免精度误差的最佳方法:

BigDecimal percentageAmount = number1.multiply(BigDecimal.valueOf((double)percentage/100));

解决方案1:
number1.multiply(BigDecimal.valueOf(percentage/100.0))
——解决方案2:
number1.multiply(BigDecimal.valueOf(percentage)).divide(BigDecimal.valueOf(100))
阐明:问题是50是整数,100是整数。因此,当它达到50/100时,它不会神奇地将结果变成分数(浮点数),它会对其进行整数运算,整数运算没有任何分数。