13

BigDecimal 変数があります

BigDecimal x = new BigDecimal("5521.0000000001");

方式:

x = x.add(new BigDecimal("-1")
      .multiply(x.divideToIntegralValue(new BigDecimal("1.0"))));

値を取得するために整数部分を削除したいのですx = ("0.0000000001")が、新しい値は 0.0000000001 ではなく 1E-10 です。

4

4 に答える 4

21

To get a String representation of the BigDecimal without the exponent part, you can use
BigDecimal.toPlainString(). In your example:

BigDecimal x = new BigDecimal("5521.0000000001");
x = x.add(new BigDecimal("-1").
              multiply(x.divideToIntegralValue(new BigDecimal("1.0"))));
System.out.println(x.toPlainString());

prints

0.0000000001
于 2012-08-19T13:18:48.130 に答える
1

おそらく、BigDecimalを使用しても実際には役に立たないでしょう。

double d = 5521.0000000001;
double f = d - (long) d;
System.out.printf("%.10f%n", f);

プリント

0.0000000001

ただし、値5521.0000000001はおおよその表現にすぎません。

実際の表現は

double d = 5521.0000000001;
System.out.println(new BigDecimal(d));
BigDecimal db = new BigDecimal(d).subtract(new BigDecimal((long) d));
System.out.println(db);

プリント

5521.000000000100044417195022106170654296875
1.00044417195022106170654296875E-10

あなたが思っているものとは違う値を取得しようとしているように見えるので、あなたがしようとしていることは何でも意味がないのではないかと思います。

于 2012-08-20T20:06:22.750 に答える