2017-09-23 2 views
1

J'essaie de faire le code mathématique. Mais je ne peux pas le faire.Mauvais résultat mathématique décimal

double x = z + ((z * (25.7 - (((z - 400)/30) * 1.27)))/100); 
int d = (int) Math.round(x); 

par exemple si z = 910. Le résultat mathématique réel est, x = 947.401, d = 947 mais ce n'est pas le cas avec ce code.

Pourriez-vous m'aider à résoudre.

+0

devrait probablement comprendre comment vous manipuler le numéro comme il semble que vous perdez une précision en fonction de la façon dont vous fais tout. Vous devriez apprendre à propos de la troncature int et de la précision des opérations par rapport au double. – JoxTraex

+0

Si 'z' est intégral, vous perdrez de la précision dans l'expression (z -400)/30. – CAF

+0

Merci, vous m'avez montré la solution. –

Répondre

2

Vous devez savoir comment précédence fonctionne dans la programmation

  • () précédence
  • puis/et *

  • le - et +

dans votre problème

Th est Déclaration z + ((z * (25.7 - (((z - 400)/30) * 1.27)))/100) exécutera comme

let z = 910 

(z - 400) // result 510 
then this (z - 400)/30) // result 17 
then this (((z - 400)/30) * 1.27))) // result 21.59 
then this (25.7 - (((z - 400)/30) * 1.27)) //result 4.11 
then this (25.7 - (((z - 400)/30) * 1.27)))/100) // result 0.2159 
then this ((z * (25.7 - (((z - 400)/30) * 1.27)))/100) // result 37.401 
then this z + ((z * (25.7 - (((z - 400)/30) * 1.27)))/100) // final result 947.401 

Ensuite, il complètera le 947.401 et vous donner 947

+0

Merci, vous m'avez montré la solution. –