簡體   English   中英

在BigDecimal中刪除逗號后面的前導零

[英]Remove leading zeros behind comma in BigDecimal

我有2個BigDecimals,並且我想刪除兩個數字相同的前導零,即使是逗號后面的數字也是如此。 沒有昂貴的toString轉換,有沒有辦法做到這一點? 以下是一些我希望它看起來如何的示例:

0.0004-> 0.4

逗號后面有3個零,所以我也要刪除另一個1個的3個零:

0.00003-> 0.03

我認為您可以使用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

取較大的數字,與0.1比較時迭代應用movePointRight ,以知道何時停止。 然后在較小的數字上將點向右移動相同的量。

這是一個快速的主張

    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);

你可以做得更好

嘗試使用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);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM