![](/img/trans.png)
[英]strip zeros for BigDecimal only for after the decimal point in Java
[英]Java : Removing zeros after decimal point in BigDecimal
我有一個這樣的程序,
BigDecimal bd = new BigDecimal(23.086);
BigDecimal bd1= new BigDecimal(0.000);
bd = bd.setScale(2, RoundingMode.HALF_UP).stripTrailingZeros();
bd1 = bd1.setScale(2, RoundingMode.HALF_UP).stripTrailingZeros();
System.out.println("bd value::"+ bd);
System.out.println("bd1 value::"+ bd1);
我得到以下 output: bd
為23.09
, bd1
為 0.00,但我希望bd1
為0
而不是0.00
。 我是否正確應用了這些方法?
嘗試這個
import java.math.BigDecimal;
import java.text.DecimalFormat;
public class calculator{
public static void main(String[] args) {
BigDecimal bd = new BigDecimal(23.086);
BigDecimal bd1= new BigDecimal(0.000);
DecimalFormat df = new DecimalFormat("0.##");
System.out.println("bd value::"+ df.format(bd));
System.out.println("bd1 value::"+ df.format(bd1));
}
}
簡單,干凈,靈活,易於2理解和維護代碼
( 也可以double
)
DecimalFormat df = new DecimalFormat();
df.setMaximumFractionDigits(2); //Sets the maximum number of digits after the decimal point
df.setMinimumFractionDigits(0); //Sets the minimum number of digits after the decimal point
df.setGroupingUsed(false); //If false thousands separator such ad 1,000 wont work so it will display 1000
String result = df.format(bd);
System.out.println(result);
BigDecimal bd = new BigDecimal(23.086);
BigDecimal bd1 = new BigDecimal(0.000);
bd = bd.setScale(2, RoundingMode.HALF_UP).stripTrailingZeros();
bd1 = bd1.setScale(2, RoundingMode.HALF_UP).stripTrailingZeros();
System.out.println("bd value::"+ bd); System.out.println("bd1 value::"+ bd1);
System.out.println("new way:" + bd1.intValueExact());
//輸出bd值:: 23.09
bd1值:: 0.00
新方式:0
假設您的BigDecimal值為23000.00
而您希望它為23000
。 您可以使用stripTrailingZeros()
方法,但是會給您“錯誤”的結果:
BigDecimal bd = new BigDecimal("23000.00");
bd.stripTrailingZeros() // Result is 2.3E+4
您可以通過調用.toPlainString()
並將其傳遞給BigDecimal構造函數以使其正確處理來對其進行修復:
BigDecimal bd = new BigDecimal("23000.00");
new BigDecimal(bd.stripTrailingZeros().toPlainString()) // Result is 23000
你可以這樣做
System.out.println("bd value: " + ((bd.scale() == 0) ? bd.unscaledValue() : bd));
下面的這種方法更好地使用IMO
bd1 = bd1.stripTrailingZeros();
System.out.println(bd1.toPlainString());
印刷品:
0
如果bd1 = 1.2300,將打印
1.23
我創建此方法來解決我的問題...
private BigDecimal removeZeros(BigDecimal bigDecimal){
return new BigDecimal(bigDecimal.stripTrailingZeros().toPlainString());
}
我不喜歡,但做這份工作
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.