2011-04-07 30 views
7

Java中是否有簡單的方法來格式化小數,浮點數,雙精度等以僅打印數字的小數部分?我不需要整數部分,即使/特別是如果它是零! 我目前使用String.indexOf(「。」)方法結合String.substring()方法來取出小數點右邊的數字部分。有沒有更乾淨的方法來做到這一點?在DecimalFormat類或printf方法中找不到任何內容。兩者總是在小數點前返回一個零。Java - 僅打印小數部分的格式編號

+0

你想顯示小數點? – 2011-04-07 16:18:24

+0

是的,我想顯示小數點 – Fred 2011-04-07 16:27:59

回答

7

您可以通過將double轉換爲long來移除該值的整數部分。然後,您可以從原始值中減去這是僅剩的分數值:

double val = 3.5; 
long intPartVal= (long) val; 
double fracPartVal = val - intPartVal; 
System.out.println(fracPartVal); 

如果你想擺脫前導零的,你可以這樣做:由

System.out.println(("" + fracPartVal).substring(1)); 
+0

我相信仍然會打印前導零。我需要它來打印:.5,而不是0.5。 – Fred 2011-04-07 16:22:39

+0

+1這對我來說是新的。這裏是另一個[示例](http://www.java2s.com/Code/Java/Language-Basics/Obtainingtheintegerandfractionalparts.htm)。 – mre 2011-04-07 16:24:10

+2

以刪除前導零的方式添加,但我相信這或多或少是您已經在做的。我認爲,扣除數字中的整數部分仍然應該是更具吸引力的解決方案。 – jberg 2011-04-07 16:25:06

5

鴻溝1並獲得餘數以獲得小數部分(使用「%」)。 (使用「#」符號來抑制前導零)使用DecimalFormat格式化結果:

double d1 = 67.22; 
double d2 = d1%1; 
DecimalFormat df = new DecimalFormat("#.00"); 
System.out.println(df.format(d2)); 

此打印0.22

+0

是的,它做到了。 – Fred 2011-07-13 00:26:21

0

這將打印0.3

double x = 23.8; 
int y =(int)x; 
float z= (float) (x % y); 
System.out.println(z); 
+0

這會工作,但它不必要的複雜。簡單地取其餘的模1將做,或者減去整個整數部分。 – poolie 2015-11-12 18:42:49