小于1且大于0的值的计算百分比

时间:2013-02-12 02:21:17

标签: java

我正在尝试使用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);

但结果相同。

即使它是十进制,我怎样才能显示百分比?

5 个答案:

答案 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成为一个双倍,你将能够保留小数。