删除BigDecimal中逗号后面的前导零

时间:2015-09-04 09:19:52

标签: java bigdecimal

我有2个BigDecimals,我想为这两个数字删除相同数量的前导零,即使是逗号后面的数字。没有昂贵的toString转换,有没有办法做到这一点? 以下是我希望它看起来像的一些例子:

0.0004 - > 0.4

逗号后面有3个零,所以我想在另一个上删除3个零:

0.00003 - > 0.03

4 个答案:

答案 0 :(得分:1)

我认为您可以使用movePointRight方法。以下是javarepl输出。

java> BigDecimal a = new BigDecimal("0.0004");
java.math.BigDecimal a = 0.0004
java> a.movePointRight(3);
java.math.BigDecimal res2 = 0.4
java> BigDecimal b = new BigDecimal("0.00003");
java.math.BigDecimal b = 0.00003
java> b.movePointRight(3);
java.math.BigDecimal res4 = 0.03

答案 1 :(得分:1)

取较大的数字,在与0.1比较时反复应用movePointRight以知道何时停止。然后在较小的数字上向右移动相同的数量。

答案 2 :(得分:1)

这是一个快速提议

    BigDecimal a = new BigDecimal("0.0004");
    BigDecimal b = new BigDecimal("10000.000003");
    final BigInteger aInteger = a.abs().toBigInteger();
    final BigDecimal aDecimal = a.subtract(new BigDecimal(aInteger));
    final BigInteger bInteger = b.abs().toBigInteger();
    final BigDecimal bDecimal = b.subtract(new BigDecimal(bInteger));
    final BigDecimal x = aDecimal.compareTo(bDecimal) > 1 ? b : a;
    BigDecimal DECIMAL = x.subtract(new BigDecimal(x.abs().toBigInteger()));
    int count = 0;
    final BigDecimal one = new BigDecimal(1);
    while (DECIMAL.multiply(new BigDecimal(10)).compareTo(one) < 0) {
        count++;
        DECIMAL = DECIMAL.multiply(new BigDecimal(10));
    }
    a = new BigDecimal(aInteger).add(aDecimal.movePointRight(count));
    b = new BigDecimal(bInteger).add(bDecimal.movePointRight(count));
    System.out.println("a =" + a + "  b = " + b);

你可以做得更好

答案 3 :(得分:0)

尝试使用DecimalFormat,查看网址 http://docs.oracle.com/javase/7/docs/api/java/text/DecimalFormat.html

如下所示玩BigDecimal

DecimalFormat nf = new DecimalFormat("##,###.###");
nf.setParseBigDecimal(true);
BigDecimal bd = ((BigDecimal) nf.parse("10,233.907")).setScale(3,BigDecimal.ROUND_HALF_UP);
相关问题