2016-09-16 2 views
0

Pourquoi les nombres de points Java sont-ils automatiquement doublés? Quand je le lance, ça marche. Mais ce n'est pas une belle façon, à mon avis.Coulée automatique pour doubler dans le paramètre

Mes méthodes pourraient être modifiées en double dans la signature. Mais quand j'importe quelque chose, je ne trouve aucune solution.

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 
    } 

} 

Lancers problèmes de compilation non résolues:

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

Parce que '0,1' est un double littéral; un entier multiplié par un double est un double etc. Si vous voulez un littéral float, utilisez le suffixe 'f'. –

Répondre

2

Cela se produit parce que quand un suffixe « f » ou « d » est pas spécifiée pour un nombre décimal, java automatiquement par défaut à un double. Par conséquent, run (0,1);

devient: exécution (0.1d);

+0

Puis-je changer cela dans un projet Java? – user6266369

+0

Vous pouvez essayer de créer une méthode surchargée 'run (double x)', baisser la valeur pour flotter et appeler 'run (float x)' à partir de là, au risque de perdre des informations dans la diffusion descendante. Fondamentalement, 'run (0.1)' invoquerait la méthode double et ensuite, cette méthode, invoquerait la méthode float. – Vishal

+0

Bien que j'utilise personnellement la variante majuscule du suffixe, si juste pour être symétrique avec le suffixe pour long 'L', ce qui est préférable parce que' l' est confus. –

3

Tel que défini dans le Java Language Specification:

A virgule flottante littéral est du type float si elle peut être suivie de la lettre ASCII F ou F; sinon son type est double et il peut éventuellement être suffixé par une lettre ASCII D ou d

Ainsi, au lieu de jeter, vous pouvez préciser au compilateur que vous utilisez réellement un littéral de type float en utilisant un suffixe :

run(0.1f);