web-dev-qa-db-fra.com

Comment arrondir le double au nombre entier le plus proche, puis convertir en float?

J'utilise Java.util.Random pour générer un gaussien aléatoire. Je dois convertir ce gaussien en float. Cependant, le gaussien est un double, j'ai donc besoin d'un moyen de convertir l'un ou l'autre tour, puis de le convertir en float. Je dois arrondir au nombre entier le plus proche, arrondir au plus haut. Voici ma question: comment?

27
JAW1025

float b = (float)Math.ceil(a); Ou float b = (float)Math.round(a);

Selon que vous vouliez dire "arrondir au nombre entier le plus proche" (arrondi) ou "arrondir au plus haut" (plafond).

Méfiez-vous de la perte de précision lors de la conversion d'un double en float, mais cela ne devrait pas être un problème ici.

51
Paul Tomblin

Voici un exemple rapide:

public class One {

    /**
     * @param args
     */
    public static void main(String[] args) {

        double a = 4.56777;
        System.out.println( new Float( Math.round(a)) );

    }

}

le résultat et la sortie seront: 5.0
la limite supérieure la plus proche Float à la valeur de départ de double a = 4.56777
dans ce cas, l'utilisation de round est recommandée car elle prend en valeur double et fournit des valeurs entières long

Cordialement

8
VeRo
3
r0ast3d

Pour ce qui vaut la peine:

l'entier le plus proche d'une entrée donnée, comme indiqué dans le tableau suivant, peut être calculé à l'aide de Math.ceil ou Math.floor en fonction de la distance entre l'entrée et l'entier suivant.

+-------+--------+
| input | output |
+-------+--------+
|     1 |      0 |
|     2 |      0 |
|     3 |      5 |
|     4 |      5 |
|     5 |      5 |
|     6 |      5 |
|     7 |      5 |
|     8 |     10 |
|     9 |     10 |
+-------+--------+

private int roundClosest(final int i, final int k) {
    int deic = (i % k);
    if (deic <= (k / 2.0)) {
        return (int) (Math.floor(i / (double) k) * k);
    } else {
        return (int) (Math.ceil(i / (double) k) * k);
    }
}