2016-09-16 40 views
0

中自動轉換爲雙倍爲什麼Java自動將點數自動加倍?當我施放它時,它會起作用。但在我看來,這不是一種美麗的方式。在參數

我的方法可以更改爲雙倍簽名。但是當我輸入某些東西時,我找不到解決方案

public class Demo { 

    public static void main(String[] args) { 
     run(0.1); 
     run(1*0.1); 
     run(1); 
     importedClass.setPosition(0.1, 3.5); 
     //setPosition(float, float) not applicable for the arguments (double, double) 
     run((float) 0.1); 
     run((float) 1*0.1); 
     run(1); 
     importedClass.setPosition((float) 0.1, (float) 3.5); 
    } 

    public static void run(float x) { 
     //do something 
    } 

} 

拋出未解決的編譯問題:

Exception in thread "main" java.lang.Error: Unresolved compilation problems: 
The method run(float) in the type Demo is not applicable for the arguments (double) 
The method run(float) in the type Demo is not applicable for the arguments (double) 

at test.Demo.main(Demo.java:6) 
+1

因爲'0.1'是一個雙重字面;一個乘以double的整數是一個double等等。如果你想要一個浮點數字,使用'f'後綴。 –

回答

2

這是因爲當一個十進制數,JAVA未指定後綴「F」或「d」爲自動默認爲兩倍。 (0.1);因此, run(0.1);

變成: run(0.1d);

+0

我可以在Java項目中更改它嗎? – user6266369

+0

您可以嘗試創建一個重載的方法'run(double x)',將該值倒置並浮動並從那裏調用'run(float x)',否則在下載時可能會丟失信息。基本上,'run(0.1)'會調用double方法,然後這個方法會調用float方法。 – Vishal

+0

雖然我會親自使用後綴的大寫變體,但如果只是爲了與長'L'的後綴對稱,由於'l'很容易混淆,所以這是首選。 –

3

Java Language Specification定義:

甲浮點文字的類型爲float如果它與ASCII字母F或f爲後綴;否則它的類型是雙,它可以任選地用ASCII字母d或d

所以不是後綴鑄造你可以清楚地知道你實際上是使用文字float類型使用後綴的編譯器:

run(0.1f);