2017-04-07 47 views
-1

我已經查看了一些與格式化數有關的線程。 大多數情況下,它的作品除了價值3.101。 Float和Double已經與##和00格式一起使用。Java - 十進制格式當返回浮點數或十進制數時丟失精度

import java.text.DecimalFormat; 

public class DecimalFormatTest { 
public static void main(String[] args) 
{ 
    Float d1 = -3.1011f; 
    Double ds = -3.1011; 
    DecimalFormat df = new DecimalFormat("#.##"); 
    System.out.println (Double.valueOf(df.format(d1))); 
    System.out.println (Double.valueOf(df.format(ds))); 

    DecimalFormat df2 = new DecimalFormat("#.00"); 
    System.out.println (Double.valueOf(df2.format(d1))); 
    System.out.println (Double.valueOf(df2.format(ds))); 
} 
} 

輸出是:

-3.1 
-3.1 
-3.1 
-3.1 

預期輸出:

-3.10 
-3.10 
-3.10 
-3.10 

正如上面提到的,這個工程我已經測試過的所有其他號碼。出於某種原因,這導致了一個問題。

任何想法是什麼讓這個號碼如此不同以及需要額外的步驟來獲得第二位數字?

請記住,關鍵是我想最終返回一個浮點數或雙精度值。

+0

的[?我如何圓一個雙在Java小數點後兩位(可能的複製http://stackoverflow.com/questions/5710394/how-do-i -double-to-two-decimal-places-in-java) – Omore

+0

我不完全清楚你的問題是什麼。 –

+1

刪除'Double.valueOf'位,它會更好地工作。 – assylias

回答

0

這工作:

Double number = 3.101; 
System.out.printf("%.2f", number); 
+0

歡迎來到Stack Overflow!儘管您可能已經解決了此用戶的問題,但僅有代碼的答案對於未來出現此問題的用戶來說並不是很有幫助。請編輯您的答案,以解釋爲什麼您的代碼可以解決原始問題。 –

3

試試這個。

public static void main(String[] args) 
    { 
     Float d1 = -3.1011f; 
     Double ds = -3.1011; 
     DecimalFormat df = new DecimalFormat("0.00"); 
     System.out.println (df.format(d1)); 
     System.out.println (df.format(ds)); 

     DecimalFormat df2 = new DecimalFormat("0.00"); 
     System.out.println (df2.format(d1)); 
     System.out.println (df2.format(ds)); 
    } 
+0

歡迎來到Stack Overflow!儘管您可能已經解決了此用戶的問題,但僅有代碼的答案對於未來出現此問題的用戶來說並不是很有幫助。請編輯您的答案,以解釋爲什麼您的代碼可以解決原始問題。 –

0

這裏的主要罪魁禍首是Double.valueOf。嘗試刪除它,它應該正常工作如下: 此外,把("#.##")會導致進一步的問題。所以寧可至少在精度之後使用任何("0.00")

import java.text.DecimalFormat; 

public class DecimalFormatTest { 
public static void main(String[] args) 
    { 
     Float d1 = -3.1011f; 
     Double ds = -3.1011; 
     DecimalFormat df = new DecimalFormat("0.00"); 
     System.out.println (df.format(d1)); 
     System.out.println (df.format(ds)); 

     DecimalFormat df2 = new DecimalFormat("0.00"); 
     System.out.println (df2.format(d1)); 
     System.out.println (df2.format(ds)); 
    } 
} 

參考:Double decimal formatting in Java

+0

謝謝,在這種情況下它是有道理的,但使用Double.valueOf是因爲我實際上需要一個Double而不是一個字符串。 –

+0

請參閱參考鏈接。 – dildeepak

+0

@未處理 - 您不需要雙數據類型用於顯示目的。 Double數據類型會丟棄尾隨零,因爲不需要它們。您只需要顯示尾隨零。 – DevilsHnd