2013-02-20 6 views
4

J'essaie d'arrondir l'entrée des utilisateurs mais je peux sembler obtenir mon double pour arrondir à un int. Fondamentalement, quand j'entre 4.4999, il ne sera pas arrondi à 5.Math.round et Math.ceil ne fonctionnent pas

Des idées?

+0

y: = f (x) ... f ne fait pas x "changement" .. –

+0

'Math.round()' fonctionne de la même manière que 'Math.floor (a + 0.5d)'. Si vous calculez: '4.4999 + 0.5' qui ne vous donnera pas plus de' 5' et c'est pourquoi vous n'obtiendrez pas '5' avec round dans votre instance. – Tom

Répondre

7

Math.ceil()renvoie la valeur de plafond. Il ne peut pas changer la valeur de la variable qu'il prend en argument, car Java passe les arguments par valeur. Donc, vous devez faire

hours = Math.ceil(hours); 
+0

(int) Math.ceil (3/2.0) donnera réponse 2 (int) Math.ceil (3/2) donnera réponse 1 Afin d'obtenir la valeur du flotteur, vous devez lancer (ou ajouter .0) à l'un des arguments –

1

Math.ciel renvoie un Double. Quelque chose comme cela devrait fonctionner (à l'intérieur de votre bloc hours > 0):

cost += Math.ceil(hours) * hourlyRate; 
3

deux fonction retourne les arrondis (ou lambrissées) valeurs, mais ne changent pas la variable passée en paramètre.

Utilisez par ex. hours = Math.ceil(hours);.

2

Vous n'êtes pas attribuer le résultat de Math.ceil(hours) retour à hours il ne sera jamais ronde.

6

La solution actuelle est d'utiliser double dans la méthode ceil.

Math.ceil(7 * 50/100) renverra 3.0 même si la valeur réelle résultant de 7*50/100 est 3.5. C'est parce que tout est int, le résultat de 350/100 lui-même sera 3. Si toutefois vous donnez Math.ceil(7 * 50/100D), le résultat sera 4.0. Par conséquent, le 4.999 dans votre question devrait être un double et non le résultat d'une opération entière comme 4999/1000.

Assurez-vous que tout ce que vous donnez à l'intérieur d'un ceil est double et non un int.

0
int a = 15 

int b = 2; 

int x = (int) Math.ceil(a/b); 

int y = (int) Math.ceil((double) a/(double) b); 

Résultats:

x: 7

y: 8

+0

** De la file d'attente **: Puis-je vous demander d'ajouter un peu de contexte autour de votre code source. Les réponses au code seulement sont difficiles à comprendre. Cela aidera le demandeur et les futurs lecteurs à la fois si vous pouvez ajouter plus d'informations dans votre message. – RBT

Questions connexes