2

私は以下のこのコードを持っています、私の望ましい答えは37.58であり、37576を入力した後の37.56または37.60ではありません

BigDecimal n = new BigDecimal(num);
BigDecimal t = new BigDecimal(100);

BigDecimal res = n.divide(t);
BigDecimal b =res.setScale(1, BigDecimal.ROUND_HALF_UP);
DecimalFormat forma = new DecimalFormat("K0.00");
String bigf = forma.format(b);



txtnewk.setText(" " + bigf);

どのような変更を加える必要がありますか?

4

4 に答える 4

3

次のコードを使用します。

String num = "37576";
BigDecimal n = new BigDecimal(num);
BigDecimal t = new BigDecimal(1000);
BigDecimal res = n.divide(t);
BigDecimal b = res.setScale(2, BigDecimal.ROUND_HALF_UP);

b は希望どおり 37.58 です。

于 2013-01-14T10:42:10.170 に答える
0

間違ったバージョンの除算を使用しています (すぐに丸める場合)。setScale の値が間違っています。あなたが持っている必要があります:

BigDecimal res = n.divide(t, 2, BigDecimal.ROUND_HALF_UP);
于 2013-01-14T10:45:38.000 に答える
0

doubleあなたができることを使用して

long l = 37576; // or Long.parseLong(text);
double v = Math.round(l / 10.0) / 100.0;
System.out.println(v);

版画

37.58

最初の四捨五入/ 10.0は、丸めによって最下位の桁を削除する/ 100.0ことを示し、 は小数点以下の桁数を 2 桁シフトすることを示します。

于 2013-01-14T11:01:41.910 に答える
0

数値を丸めるには、次のコードを使用します。

public static double round(double value, int places) {
    if (places < 0) throw new IllegalArgumentException();

    long factor = (long) Math.pow(10, places);
    value = value * factor;
    long tmp = Math.round(value);
    return (double) tmp / factor;
}
于 2013-01-14T10:42:30.877 に答える