[英]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.