首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >小于1且大于0的值的百分比计算

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

Stack Overflow用户
提问于 2013-02-12 10:21:17
回答 5查看 3.3K关注 0票数 3

我正在尝试使用BigDecimal显示百分比。

例如,如果我必须这样做

代码语言:javascript
复制
    double val = (9522 / total ) * 100;

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

其中总数为1200000。

我希望将计算结果显示为百分比,但由于计算结果小于0,因此无法显示百分比

我也试过了

代码语言:javascript
复制
    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);

但结果是一样的。

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

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2013-02-12 10:22:57

问题是你在做整数除法。

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

代码语言:javascript
复制
double val = (9522 / (double) total) * 100;

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

票数 8
EN

Stack Overflow用户

发布于 2013-02-12 10:22:32

您必须通知Java,您希望至少有一个分子或分母被视为double,以确保结果是double。

这将会起作用:

代码语言:javascript
复制
double val = ((double)9522 / total ) * 100;

System.out.println("Val is :" + val);
票数 3
EN

Stack Overflow用户

发布于 2013-02-12 10:25:30

BigDecimal decimal =新的BigDecimal((9522 * 100 )/BigDecimal);

这不是在BigDecimal上进行操作的方式:在构造BigDecimal时,精度已经消失,因为计算(9522 * 100 ) / total是在编译时完成的。这就是为什么结果与整数是一样的:实际上,整个计算都是在整数中完成的。

下面是使用BigDecimal对象进行计算的方法:

代码语言:javascript
复制
BigDecimal decimal = new BigDecimal(9522)
    .multiply(new BigDecimal(100))
    .divide(new BigDecimal(total));
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14824438

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档