簡體   English   中英

格式化浮點數

[英]Formatting Floating Point Numbers

我有一個double類型的變量,我需要以高達3位小數的精度打印它,但它不應該有任何尾隨零...

例如。 我需要

2.5 // not 2.500
2   // not 2.000
1.375 // exactly till 3 decimals
2.12  // not 2.120

我嘗試使用DecimalFormatter ,我做錯了嗎?

DecimalFormat myFormatter = new DecimalFormat("0.000");
myFormatter.setDecimalSeparatorAlwaysShown(false);

謝謝。 :)

嘗試模式"0.###"而不是"0.000"

import java.text.DecimalFormat;

public class Main {
    public static void main(String[] args) {
        DecimalFormat df = new DecimalFormat("0.###");
        double[] tests = {2.50, 2.0, 1.3751212, 2.1200};
        for(double d : tests) {
            System.out.println(df.format(d));
        }
    }
}

輸出:

2.5
2
1.375
2.12

你的解決方案幾乎是正確的,但是你應該用十進制格式模式用“#”替換零'0'。

所以看起來應該是這樣的:

DecimalFormat myFormatter = new DecimalFormat("#.###");

並且該行不是decimalSeparatorAlwaysShown的(默認情況下decimalSeparatorAlwaysShownfalse ):

myFormatter.setDecimalSeparatorAlwaysShown(false);

以下是javadocs的簡短摘要:

Symbol  Location    Localized?  Meaning
0   Number  Yes Digit
#   Number  Yes Digit, zero shows as absent

以及javadoc: DecimalFormat的鏈接

使用NumberFormat類。

例:

  double d = 2.5; NumberFormat n = NumberFormat.getInstance(); n.setMaximumFractionDigits(3); System.out.println(n.format(d)); 

輸出為2.5,而不是2.500。

暫無
暫無

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

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