1、String.format(String format,Object… args)
Java中用String.format()來控制輸出精度,
format參數用來設置精度格式,
args參數代表待格式化的數字。
返回值是格式化后的字符串。
Java API文檔中的解釋是這樣的:
文檔不好懂…
沒關系
直接上代碼!
//精確到小數點后兩位: public class test { public static void main(String args[]) { //格式控制與C語言類似 System.out.println(String.format("%.2f", Math.PI)); } } //結果 3.14
這種方法,在處理單個數據比較方便,如果要對大量數字進行格式化控制,這種方法就顯得有些冗余。
下面這個方法比較適合批量處理數據,即:一次設定格式,一直使用該格式。
2、DecimalFormat類,用以定制小數格式
先上代碼,如果不懂‘#’和‘0’代表什么意思,直接略過代碼,去看后面的內容。了解之后再返回來看代碼。
public class test { public static void main(String args[]) { // System.out.println(String.format("%.2f", Math.PI)); double pi = 3.142; //僅取整數部分 System.out.println(new DecimalFormat("0").format(pi));//3 System.out.println(new DecimalFormat("#").format(pi));//3 //取小數點后兩位 System.out.println(new DecimalFormat("0.00").format(pi));//3.14 //取小數點后兩位,整數部分取兩位,不足前面補零 System.out.println(new DecimalFormat("00.00").format(pi));//03.14 //取小數點后4位,不足補零 System.out.println(new DecimalFormat("0.0000").format(pi));//3.1420 //以百分比方式計數並小數點后2位 System.out.println(new DecimalFormat("0.00%").format(pi));//314.20% long l = 123456789; //科學計數法,取5位小數 System.out.println(new DecimalFormat("0.00000E0").format(l));//1.23457E8 //顯示為兩位整數,並保留小數點后四位的科學計數法 System.out.println(new DecimalFormat("00.0000E0").format(l));//12.3457E7 //每三位以逗號分隔 System.out.println(new DecimalFormat(",000").format(l));//123,456,789 //嵌入格式文本 System.out.println(new DecimalFormat("這個長整數為:0").format(l));//這個長整數為:123456789 } }
看了這么半天“#”和“0”,那么這兩個有什么區別呢?先別急,等我慢慢解釋。
先放兩張截圖自己揣摩一下(看不懂繼續往后翻):
這兩張圖片內容類似,但互為補充。
接下來着重解釋一下“0”和“#”。這是精度控制的核心所在。
0:0總是顯示出來,如果不足以0補足,如果多余則精確度為0的個數。
例如:
pi = 3.142 System.out.println(new DecimalFormat("0.00").format(pi)); //結果 3.14
小數點后兩個0,代表精確到小數點后兩位
例如:
pi = 3.142 System.out.println(new DecimalFormat("0.0000").format(pi)); //結果 3.1420
原本要精確到小數點后四位,但是小數點后不足四位,所以用0代替
一般情況下的精確度控制僅用0表示足夠了。
那么“#”代表什么意思呢?
#:總是省略引導0
“#”和“0”都可以控制精度,但是當“#”所在的位置為0時,就會忽略掉這個0。忽略掉的這個0不影響結果的大小。
舉個例子
public static final DecimalFormat df1 = new DecimalFormat( "#.##" ); public static final DecimalFormat df2 = new DecimalFormat( "#.00" ); System.out.println(df1.format(7.80));//8后面的0被忽略 System.out.println(df1.format(85));//不會在后面補0 System.out.println(df1.format(85.786));//正常顯示精度,因為后面沒有出現0 System.out.println(df1.format(85.796));//根據四舍五入,后面的0被忽略 System.out.println(df2.format(7.80)); System.out.println(df2.format(85)); System.out.println(df2.format(85.786)); //結果 7.8 85 85.79 85.8 7.80 85.00 85.79
也就是說,使用#號來控制精度,可能起不到控制精度的效果。
因此建議,始終用0來控制精度。
參考:
http://tutorials.jenkov.com/java-internationalization/decimalformat.html
https://blog.csdn.net/thunder4393/article/details/1739911
https://www.cnblogs.com/hq233/p/6539107.html
https://stackoverflow.com/questions/16583604/formatting-numbers-using-decimalformat
————————————————
版權聲明:本文為CSDN博主「Medlen」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/weixin_38481963/article/details/82120870