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;

オペランドの 1 つを double にキャストすると、Java はデフォルトの整数除算ではなく、正しいタイプの除算を実行します。

于 2013-02-12T02:22:56.650 に答える
3

結果が確実に double になるように、分子または分母の少なくとも 1 つを double として処理することを 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 ) / 合計);

これは、に対する操作方法ではありません。コンパイル時に計算が行われるため、 が構築されるまでに精度が失われます。そのため、結果は整数の場合と同じです。実際、計算全体が整数で行われます。BigDecimalBigDecimal(9522 * 100 ) / total

BigDecimalオブジェクトで計算する方法は次のとおりです。

BigDecimal decimal = new BigDecimal(9522)
    .multiply(new BigDecimal(100))
    .divide(new BigDecimal(total));
于 2013-02-12T02:25:30.160 に答える
2

2 つの整数を除算すると、結果が切り捨てられます。を追加し.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 は整数になり、操作は結果が 1 より小さい必要があることを意味するため、0 に切り捨てられます。total を double に変換すると、結果はdouble で、小数を保持することができます。

于 2013-02-12T02:25:07.190 に答える