簡體   English   中英

Java DecimalFormat省略小數點前的前導零

[英]Java DecimalFormat to omit leading zero before decimal point

讓我們看下面的代碼片段

double f = .123;        
System.out.println(f);
System.out.println(new DecimalFormat(".###").format(f));

因此,盡管我們必須定義小數點/句點后的尾數,但我們可以使用.###省略前導零0。

我想定義DecimalFormat格式程序,該格式程序可以提供無限數量的after-decimal-point數字。

我怎樣才能做到這一點?

ps

我確實嘗試過"." 但是我們不打印十進制數字。 我們可以使用諸如".#*"類的格式語法嗎?

Double是有限近似值(包括正負號和指數在內的64位),因此無法做到無限和精確。

使用BigDecimal。 String構造函數將根據字符串的精度。

BigDecimal n = new BigDecimal("0.1234567890123456789012345678901234567890");
n = n.multiply(n); // n now has double precision.
String s = n.toPlainString().replaceFirst("^0\\.", "."); // Without exponent.

如要無限表示,只需使用toPlainString 通過使用正則表達式替換,在句點之前降低零可能很難做到。

您可以將數字轉換為字符串,然后跳過第一個字符:

double f = .123;        
System.out.println(Double.toString(f).substring(1));

經過一些研究,我不相信可以通過使用DecimalFormat來實現。 但是,您建議使用".#*"作為有用的添加。

由於float沒有無限數量的after-dicimal-points ,因此最多使用您期望的#

您也可以將數字轉換為字符串,然后選擇要顯示的子字符串。

float f = 0.123;
String fs = Float.toString(f);
System.out.println(fs.substring(fs.indexOf('.'), fs.lenght());

如果您事先不知道,如果您的數字只有一個前導零,這也可以使用。

不幸的是,我不能告訴您DecimalFormatter是否也可以實現。

暫無
暫無

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

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