Toujours arrondir un Double

Comment pourrais-je toujours arrondir un double à un int, et ne jamais l'arrondir. Je connais Math.round(double), mais je veux qu'il se Arrondisse toujours. Donc, si c'était 3.2, Il est arrondi à 4.

Est-ce possible?

22
demandé sur Smita Ahinave 2013-10-27 08:44:24

8 réponses

Vous pouvez utiliser la méthode Math.ceil().

Voir le lien JavaDoc: https://docs.oracle.com/javase/10/docs/api/java/lang/Math.html#ceil (double)

À partir des documents:

Ceil

public static double ceil(double a)

Renvoie la plus petite valeur double (la plus proche de l'infini négatif) supérieure ou égale à l'argument et égale à un entier mathématique. Cas particuliers:

  • Si la valeur de l'argument est déjà égale à un entier mathématique, alors le résultat est le même comme argument.
  • Si l'argument est NaN ou un infini ou zéro positif ou zéro négatif, alors le résultat est le même que l'argument.
  • Si la valeur de l'argument est inférieure à zéro mais supérieure à -1.0, le résultat est négatif zéro.

Notez que la valeur de Mathématiques.ceil(x) est exactement la valeur de Math.étage(-x).

Paramètres:

  • a - une valeur.

Retourne:

Le plus petit (le plus proche infini négatif) valeur à virgule flottante qui est supérieure ou égale à l'argument et est égale à un entier mathématique.

33
répondu tabz100 2018-05-15 17:11:26

En mots simples,

  • {[1] } sera toujours arrondir ou comme dit ci-dessus, en excès.
  • {[2] } arrondira vers le haut ou vers le bas en fonction des décimales.
    • Si la décimale est égal ou supérieur à 5, alors il est arrondi.
      • décimal => 5. (1,5 = 2)
    • Si la décimale est moins de 5, alors il est , arrondi.
      • décimal

Exemples de Math.ceil et Math.round:

Le code ci-dessous retournerait:
Coût, sans ceil 2.2 et avec Ceil 3 (int), 3.0 (double). Si nous l'arrondissons: 2

    int m2 = 2200;
    double rate = 1000.0;

    int costceil = (int)Math.ceil(m2/rate);
    double costdouble = m2/rate;
    double costdoubleceil = Math.ceil(m2/rate);
    int costrounded = (int)Math.round(m2/rate);
    System.out.println("Cost, without Ceil "+costdouble+" and with Ceil "+
            costceil+"(int), "+costdoubleceil+"(double). If we round it: "+costrounded);

Si nous changeons la valeur de m2 par exemple 2499, le résultat serait: Coût, sans ceil 2.499 et avec Ceil 3 (int), 3.0 (double). Si nous l'arrondissons: 2
Si nous changeons la valeur de m2 par exemple 2550, le résultat serait:
Coût, sans Plafond 2.55 et avec Ceil 3 (int), 3.0 (double). Si nous l'arrondissons: 3

J'espère que ça aide. (Informations extraites des réponses précédentes, je voulais juste le rendre plus clair).

8
répondu maral04 2014-12-15 14:27:55
private int roundUP(double d){
    double dAbs = Math.abs(d);
    int i = (int) dAbs;
    double result = dAbs - (double) i;
    if(result==0.0){ 
        return (int) d;
    }else{
        return (int) d<0 ? -(i+1) : i+1;          
    }
}

Bon travail ! ;)

0
répondu Lostkiefer 2014-06-28 14:51:50

Ma méthode est relativement simple, j'espère que cela fonctionne pour vous.

Dans mon cas, j'ai une ligne d'objets qui ne peut contenir que 3 éléments et je dois ajuster le nombre de lignes que je dois accueillir les éléments.

J'ai donc un double numberOfRows, j'utilise ensuite numberOfRows.intValue() pour obtenir une valeur int pour nombredelignes.

Si la valeur int que je reçois est inférieure à numberOfRows, j'ajoute 1 à numberOfRows pour l'arrondir, sinon la valeur que je reçois de numberOfRows.intValue () est la réponse I vouloir.

J'ai écrit ce simple for loop pour le tester:

    for(int numberOfItems = 0; numberOfItems < 16; numberOfItems++) {
        Double numberOfRows = numberOfItems / 3.0;

        System.out.println("Number of rows are: " + numberOfRows);
        System.out.println("Number of items are: " + numberOfItems);
        if(numberOfRows.intValue() < numberOfRows) {
            System.out.println("int number of rows are: " + (numberOfRows.intValue() + 1));
        }
        else {
            System.out.println("int value of rows are: " + numberOfRows.intValue());
        }
        System.out.println();
        System.out.println();
    }
0
répondu Tunji_D 2015-07-23 18:39:28

Exemple court sans utiliser Math.ceil () .

public double roundUp(double d){
    return d > (int)d ? (int)d + 1 : d;
}

Exaplanation: Comparez l'opérande à l'opérande arrondi en utilisant typecast, si un plus grand retour arrondi vers le bas argument + 1 (signifie arrondir) sinon opérande inchangé.

Exemple de Pseudo-code

double x = 3.01
int roundDown = (int)x   // roundDown = 3
if(x > roundDown)        // 3.01 > 3
    return roundDown + 1 // return 3.0 + 1.0 = 4.0
else
    return x             // x equals roundDown

Quoi qu'il en soit, vous devriez utiliser Math.ceil(). Ceci est seulement destiné à être un exemple simple de la façon dont vous pourriez le faire par vous-même.

0
répondu trinity420 2015-12-21 12:23:30

Tl; dr

BigDecimal( "3.2" ).setScale( 0 , RoundingMode.CEILING )

4

BigDecimal

Si vous voulez précision plutôt que la performance, évitez virgule flottante de la technologie. Que signifie éviter float, Float, double, Double. Pour plus de précision, utilisez BigDecimal classe.

Sur une BigDecimal, définir l'échelle de l', le nombre de chiffres à droite de la virgule. Si vous ne voulez pas de fraction décimale, réglez scale sur zéro. Et spécifiez un mode d'arrondi . Pour toujours arrondir un fraction vers le haut, l'utilisation RoundingMode.CEILING, documenté comme:

Mode D'arrondi pour arrondir vers l'infini positif. Si le résultat est positif, se comporte comme pour L'Arrondissementmode.UP; si négatif, se comporte comme pour RoundingMode.Vers le BAS. Notez que ce mode d'arrondi ne diminue jamais la valeur calculée. Ainsi, par exemple, 1.1 devient 2, et votre 3.2 devient 4.

BigDecimal bd = new BigDecimal( "3.2" ) ;
BigDecimal bdRounded = bd.setScale( 0 , RoundingMode.CEILING ) ;
String output = bdRounded.toString() ; 
System.out.println( "bdRounded.toString(): " + bdRounded ) ;  // 4

4

Voir ce code exécuté en direct à IdeOne.com .

0
répondu Basil Bourque 2017-10-30 05:28:59

Math.ceil() vous donnera la valeur la plus basse la plus proche si vous voulez qu'elle soit arrondie aux valeurs les plus proches, vous devez utiliser Math.floor()

-2
répondu Muhammad Ahmed 2013-10-27 06:10:14

Mathématiques.ceil

Public statique double ceil (double a)

Renvoie la plus petite (la plus proche de l'infini négatif) valeur double qui est supérieure ou égale à l'argument et est égale à un entier mathématique. Cas particuliers:

-2
répondu indika 2013-10-27 14:03:46