2009-10-17 8 views
1

Il est plus stylistiquement acceptable dans java d'écrire des constantes dans des opérations doubles avec ou sans ".0"?Notation correcte à l'aide de doubles

Comme dans,

double var = 200,0; double d = var/250.0; double h = 1,0 - d;

par rapport à

double var = 200; double d = var/250; double h = 1 - d;

Merci

Répondre

1

Je ne suis pas un gars Java mais C++ & C ont le même problème. Pour moi, j'utilise toujours le ".0" juste pour que je ne sois jamais mordu par une division entière indésirable. Il annule également l'avertissement occasionnel du compilateur à propos de la conversion de type (bien que ceux-ci soient rares en raison d'une sémantique de promotion de type bien définie, des entiers au virgule flottante).

4

Il ne s'agit pas de style en soi. Lorsque vous écrivez double var = 200;, 200 est un integer literal qui est ensuite converti en double via widening primitive conversion.

Il est beaucoup mieux d'être précis - si vous utilisez une double constante, écrire comme double:

double d = 200.0; 
double another = .01; 
double exp = 1E3; 

Toutes ci-dessus sont floating point literals. Être spécifique est particulièrement important dans votre deuxième exemple:

var = 50; 
double d = var/250; 

J'ai omis le type de var sur le but. On ne sait pas ce que d contiendra en conséquence - il pourrait être soit 0.2 ou 0.0 (si var étaient des nombres entiers). D'un autre côté, si vous écrivez double d = var/250.0, le résultat sera toujours 0.2.

+2

Je ne suis pas sûr, mais je devinerais * qu'avec une instruction comme 'double var = 200;' le compilateur est assez intelligent pour traiter cela comme 'double var = 200.0;' Cela dit, votre point sur l'entier la division est la raison pour laquelle vous devriez toujours inclure le ".0". – Kip

+1

J'utilise IntelliJ et il vous avertit lorsque vous essayez d'utiliser double var = 200 ;. Je pense que déclarer le littéral dans le bon type est toujours une bonne idée. –

+1

@ ChssPly76. Le JLS est entièrement clair sur ce que les expressions signifient. L'incertitude est dans l'esprit de quelqu'un qui lit le code, et un bon programmeur utilisera un style qui minimise l'incertitude. Ceci est DÉFINITIVEMENT un problème de style - choisir un style qui minimise la possibilité que les gens se méprennent sur ce que fait le code. –

2

leader et zéros au besoin, avec des constantes de simple précision dans la catégorie tels:

0.0 pour un double.

0.0f pour un flotteur.

+0

Ce n'est pas vrai, les constantes comme ".1" et ".1f" sont parfaitement valables en C/C++/Java – Kip

+0

@Kip: Nous parlons ici de préférences, pas de ce qui est strictement nécessaire. –

+0

Désolé, j'ai lu "sont nécessaires", pas "au besoin". reprendre la downvote ... – Kip

1

La plupart des utilisateurs effectueront une «double prise» lorsqu'ils verront une expression arithmétique avec des types mixtes ou la méconnaîtront complètement. Il en va de même (dans une moindre mesure) pour les zéros de tête; par exemple. en 0.1 par rapport à .1.

Un bon style consiste à écrire votre code pour qu'il soit facile à comprendre et facile à maintenir. Il s'ensuit que c'est un bon style d'utiliser des littéraux du bon type, plutôt que de compter sur la promotion, et (dans une moindre mesure) d'utiliser des zéros en tête.

1

Comme d'autres l'ont souligné, c'est juste une question de préférence et de lisibilité.Voir le code suivant et le bytecode démontées:

public class Twohundred { 
    public void intVersion() { 
    double d = 200; 
    } 

    public void dblVersion() { 
    double d = 200.0; 
    } 

} 

Résultat:

public class Twohundred extends java.lang.Object{ 

public void intVersion(); 
    Code: 
    0: ldc2_w #2; //double 200.0d 
    3: dstore_1 
    4: return 

public void dblVersion(); 
    Code: 
    0: ldc2_w #2; //double 200.0d 
    3: dstore_1 
    4: return 

} 

Comme vous pouvez le voir, les deux méthodes sont aussi identiques que vous pouvez obtenir.

Questions connexes