簡體   English   中英

Java:在 BigDecimal 中刪除小數點后的零

[英]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: bd23.09bd1為 0.00,但我希望bd10而不是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

您可以使用printf()%f說明符也適用於BigDecimal

System.out.printf("bd1 value::%.0f%n", bd1);
bd1 value::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.

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