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