7
votes

Java - Comment arrondir la valeur flottante (ou bigdecimale) de 0,5?

semble une question simple mais je crains vraiment en maths et quelques exemples en ligne que j'ai cherché ne semble pas travailler pour moi. (Le résultat vient de renvoyer la même valeur que l'entrée, etc.)

par exemple .. mais c'est en C pas Java rond à la prochaine .05 en C

donc mon but est que j'ai %. 1f format float ou double ou gros décimal et vouloir autour jusqu'à la plus proche .5 xxx

J'ai essayé après l'exemple suivant mais je n'ai pas fonctionné :( ci-dessous seulement la sortie de la valeur d'origine. Je voulais que ce soit 1,5 xxx


0 commentaires

7 Réponses :


9
votes

Multiplier (et plus tard divisant) par 2, pas 20, devrait faire le tour.


1 commentaires

omg ça marche !! : D merci! J'aurais dû étudier le développeur de mathématiques! Je pourrais même faire le même tour avec le sol () aussi, génial



20
votes

Voici une méthode simple: xxx

Ceci double la valeur, prend son plafond et la coupe en deux.


0 commentaires

5
votes
 double nearestPoint5 = Math.ceil(d * 2) / 2;

0 commentaires

4
votes

Voir le Big Décimal Javadoc sur pourquoi une chaîne est utilisée dans le constructeur xxx


0 commentaires

2
votes

Sans utiliser une fonction, vous pouvez faire

double rounded = (double)(long)(x * 2 + 0.5) / 2;


0 commentaires

5
votes

La formule ci-dessous ne fonctionne pas bien pour le numéro comme 2.16 xxx

La réponse correcte doit être 2.0, mais la méthode ci-dessus donne 2,5

Le code correct doit être : xxx


0 commentaires

-1
votes

Certaines des autres réponses ronds incorrectement ( math.round code> doivent être utilisées, pas math.floor code> ou math.ceil code>), et D'autres ne fonctionnent que pour l'arrondi à 0,5 (qui est la question posée, oui). Voici une méthode simple qui tourne correctement au double arbitraire le plus proche, avec un chèque pour assurer qu'il s'agit d'un nombre positif.

public static double roundToNearest(double d, double toNearest) {
    if (toNearest <= 0) {
        throw new IllegalArgumentException(
                "toNearest must be positive, encountered " + toNearest);
    }
    return Math.round(d/toNearest) * toNearest;
}


0 commentaires