我正在尝试使用BigDecimal显示百分比。
例如,如果我必须这样做
double val = (9522 / total ) * 100;
System.out.println("Val is :" + val);
总计为1200000。
我想以百分比显示计算,但由于计算结果为小于0的值,我无法显示百分比
我也试过
BigDecimal decimal = new BigDecimal((9522 * 100 ) / total);
BigDecimal roundValue = decimal.setScale(2, BigDecimal.ROUND_HALF_UP);
System.out.println("decimal: " + decimal);
System.out.println("roundValue: " + roundValue);
但结果相同。
即使它是十进制,我怎样才能显示百分比?
答案 0 :(得分:8)
问题是你正在进行整数除法。
如果需要小数结果,则需要进行浮点除法。
double val = (9522 / (double) total) * 100;
将一个操作数强制转换为double将导致Java执行正确的除法类型,而不是默认为整数除法。
答案 1 :(得分:3)
你必须告知Java你希望至少有一个分子或分母被视为double,以确保结果为double。
这将有效:
double val = ((double)9522 / total ) * 100;
System.out.println("Val is :" + val);
答案 2 :(得分:3)
BigDecimal decimal = new BigDecimal((9522 * 100)/ total);
这是不你如何对BigDecimal
进行操作:到构造BigDecimal
时,精度已经消失,因为计算(9522 * 100 ) / total
是在编译时完成。这就是结果与整数相同的原因:事实上,整个计算都是用整数完成的。
以下是使用BigDecimal
个对象计算的方法:
BigDecimal decimal = new BigDecimal(9522)
.multiply(new BigDecimal(100))
.divide(new BigDecimal(total));
答案 3 :(得分:2)
如果划分两个整数,则会截断结果。添加.0
以便将其转换为浮点数,然后您将不会得到截断的结果
new BigDecimal((9522.0 / total) *100);
答案 4 :(得分:1)
你可能错过演员。
double val = (9522 / (double)total ) * 100;
System.out.println("Val is :" + val);
我怀疑是total是一个int,因此9522/1200000会产生一个整数,由于操作意味着结果必须小于1.如果你将total转换为double,结果就会被截断为0成为一个双倍,你将能够保留小数。