2012-06-09 39 views
0

好了,所以我得到了一個測試程序:解析一個有效的數字後得到垃圾?

public class ParseTest { 
    public static void main(String[] args){ 
     String s = "-0.000051"; 
     System.out.println(s + " != " + Float.parseFloat(s)); 
    } 
} 

,它不是出把兩邊相同的號碼。這是輸出:

-0.000051 != -5.1E-5 

那麼,爲什麼它不輸出相同的數字在雙方?

+1

它*是*的的Float.toString()相同的數字,夥計。一個是小數,另一個是指數:兩個記號顯示相同的值!你的「println()」隱式地做着「Float.toString()」。如果你想要一個不同的符號,看看「String.format()」。 EX:String.format(「%。2f」,floatValue); – paulsm4

回答

2

這是相同數量只是different scientific representation

例如:

100 = 1E2 

0.1 = 1E-1 

如何獲得相同的表示?

如果你想同樣的表示,則使用BigDecimal

System.out.println(s + " != " + new BigDecimal(s)); 

誰在將其轉換爲這種格式?

,當您轉換基本爲String通過例如

float f = 100.123; 
String result = "" + f; 

它將調用inturns的Float.valueOf(f)調用它依次調用的new FloatingDecimal(f).toJavaFormatString();這就是這個東西被封裝

+0

它爲什麼改變表達式? – CyanPrime

+0

@CyanPrime它沒有。它是同一個數字。參見[wiki上的科學記數法](http://en.wikipedia.org/wiki/Scientific_notation)。 –

+0

好的,謝謝。我會盡快接受。 – CyanPrime