3

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

但结果相同。

即使是小数,我如何显示百分比?

4

5 回答 5

8

问题是你正在做整数除法。

如果你想要分数结果,你需要做浮点除法。

double val = (9522 / (double) total) * 100;

将您的操作数之一转换为双精度数将导致 Java 执行正确类型的除法,而不是默认为整数除法。

于 2013-02-12T02:22:56.650 回答
3

您必须通知 Java 您希望至少将分子或分母中的一个视为双精度数,以确保结果是双精度数。

这将起作用:

double val = ((double)9522 / total ) * 100;

System.out.println("Val is :" + val);
于 2013-02-12T02:22:31.800 回答
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));
于 2013-02-12T02:25:30.160 回答
2

如果你将两个整数相除,你会得到截断的结果。添加 a.0使其转换为浮点数,然后您将不会得到截断的结果

new BigDecimal((9522.0 / total) *100);
于 2013-02-12T02:22:38.587 回答
1

您可能缺少演员表。

double val = (9522 / (double)total ) * 100;

System.out.println("Val is :" + val);

我怀疑 total 是一个 int,因此 9522/1200000 结果是一个整数,它被截断为 0,因为该操作意味着结果必须小于 1。如果将 total 转换为 double,则结果将是双倍,你将能够保留小数。

于 2013-02-12T02:25:07.190 回答