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

Java 小于1且大于0的值的百分比计算,java,Java,我正在尝试使用BigDecimal显示百分比 例如,如果我必须这样做 double val = (9522 / total ) * 100; System.out.println("Val is :" + val); 总数为1200000 我想以百分比的形式显示计算结果,但由于计算值小于0,因此无法显示百分比 我也试过了 BigDecimal decimal = new BigDecimal((9522 * 100 ) / total); BigDecimal

我正在尝试使用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);
但结果是一样的


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

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

这将有助于:

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

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

如果将两个整数除,则结果将被截断。添加一个
.0
,以便将其转换为浮点,然后您将不会得到截断的结果

new BigDecimal((9522.0 / total) *100);

问题是你在做整数除法

double val = (9522 / (double) total) * 100;
如果想要分数结果,需要进行浮点除法

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

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

您可能缺少强制转换

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

System.out.println("Val is :" + val);
我怀疑total是一个int,因此9522/1200000结果是一个整数,该整数被截断为0,因为该操作意味着结果必须小于1。如果你把总数转换成双倍,结果将是双倍的,你将能够保留小数

BigDecimal decimal=新的BigDecimal((9522*100)/总计)

这不是对
BigDecimal
执行操作的方式:在构建
BigDecimal
时,精度已经消失,因为计算
(9522*100)/total
是在编译时完成的。这就是为什么结果与整数相同:事实上,整个计算都是用整数完成的

以下是如何使用
BigDecimal
对象进行计算:

BigDecimal decimal = new BigDecimal(9522)
    .multiply(new BigDecimal(100))
    .divide(new BigDecimal(total));

这是一个拥挤的问题:-这不是答案。这是一个要求海报澄清的要求(“你能试试这个,告诉我发生了什么吗?”),应该作为对问题的评论而不是答案发布。答案应该正好如此——提供问题的答案。如果您需要更多的细节或信息,可以通过征求意见的方式获得。谢谢您的建议。我觉得这样做更快,因为是的,我对最初的问题有怀疑,但我很有可能做对了(我们都做了)。我将删除第一行并更正几个术语。