2010-10-15 4 views

Répondre

1

Opérations arithmétiques dans Java dont les opérandes sont tous int s aboutira int s, de sorte que vous affectez réellement un résultat entier à une variable double. Vous devez donc en lancer au moins une en double pour que les calculs soient effectués en double, en raison de la plus grande précision.

+0

Je trouve étrange que la définition de la variable (progrès) en tant que double ne lance pas automatiquement Ce comportement. – user432209

+0

Java évalue l'expression du côté droit d'abord avant de l'affecter à la variable, donc je crois qu'au moment où le type de données est pris en compte, le résultat est déjà un int si vous ne lancez pas. – BoltClock

+1

Pourquoi le type de double affecte-t-il le calcul? Stockez un int comme un double est valide, et diviser ints et attendre un int est valide. Donc 'double progrès = 3/4; progrès == 0 »est une déclaration tout à fait légitime. Si vous définissez automatiquement 3/4 comme division flottante, comment changeriez-vous la syntaxe pour que vous puissiez faire ce qu'elle fait maintenant? – Falmarri

2

La division d'un nombre entier par un nombre entier est définie pour effectuer une division entière, comme dans la plupart des autres langages de type C (tous?). Si vous transcrivez score en un double, vous divisez une valeur à virgule flottante par un nombre entier et vous obtenez une valeur à virgule flottante.

0

L2_MAX_SCORE - L1_MAX_SCORE = 150 - 30 = 120

Supposons que le score est de 30

En utilisant à virgule flottante, la réponse devrait être 30/120 = 0,4 Avec division entière, cela se arrondi à 0 donc pourquoi il ne fonctionne pas »- il travaille actuellement, mais faire le mauvais type de division pour vos besoins

Vous pouvez

  • a) Moulage soit numérateur ou le dénominateur que le double
  • b) Réarrangez la formule à (score * 100)/(L2_MAX_SCORE - L1_MAX_SCORE)
    • avec cela, il deviendrait (30 * 100)/120 = 3000/120 = 40
    • il toujours fait la division entière, donc si le score est 31 votre réponse (3100 /120) ne sont pas 25,8333 mais 25
+0

Même si la réponse est> 1, l'objet double est toujours rempli avec 0 sans cast. – user432209

+0

Quelle est la valeur que vous utilisez pour le score? 'UpdateLevel (110)' devrait aboutir à 0.0; tandis que 'UpdateLevel (120)' sera 100.0 – Alok

Questions connexes