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?
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?
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);
(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 –
Math.ciel
renvoie un Double
. Quelque chose comme cela devrait fonctionner (à l'intérieur de votre bloc hours > 0
):
cost += Math.ceil(hours) * hourlyRate;
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);
.
Vous n'êtes pas attribuer le résultat de Math.ceil(hours)
retour à hours
il ne sera jamais ronde.
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
.
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
** 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
y: = f (x) ... f ne fait pas x "changement" .. –
'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