Arrondir les entiers au multiple le plus proche de 10

J'essaie de comprendre comment arrondir les prix-dans les deux sens. Par exemple:

Round down
43 becomes 40
143 becomes 140
1433 becomes 1430

Round up
43 becomes 50
143 becomes 150
1433 becomes 1440

J'ai la situation où j'ai une fourchette de prix de dire:

£143 - £193

Dont je veux montrer comme:

£140 - £200

Comme il semble beaucoup plus propre

Des idées sur la façon dont je peux y parvenir?

26
demandé sur Richard Cook 2013-03-01 13:30:02

5 réponses

Je voudrais juste créer quelques méthodes;

int RoundUp(int toRound)
{
     if (toRound % 10 == 0) return toRound;
     return (10 - toRound % 10) + toRound;
}

int RoundDown(int toRound)
{
    return toRound - toRound % 10;
}

Module nous donne le reste, dans le cas de l'arrondi 10 - r vous emmène au dixième le plus proche, pour arrondir vous soustrayez simplement R. assez simple.

53
répondu evanmcdonnal 2017-12-26 17:49:08

Vous n'avez pas besoin d'utiliser module (%) ou virgule flottante...

Cela fonctionne:

public static int RoundUp(int value)
{
    return 10*((value + 9)/10);
}

public static int RoundDown(int value)
{
    return 10*(value/10);
}
12
répondu Matthew Watson 2013-03-01 10:15:32

CE code arrondit au multiple le plus proche de 10:

int RoundNum(int num)
{
     int rem = num % 10;
     return rem >= 5 ? (num - rem + 10) : (num - rem);
}

Utilisation très simple:

Console.WriteLine(RoundNum(143)); // prints 140
Console.WriteLine(RoundNum(193)); // prints 190
10
répondu PaRiMaL RaJ 2014-10-14 09:45:20

Divisez le nombre par 10.

number = number / 10;
Math.Ceiling(number);//round up
Math.Round(number);//round down

Puis multipliez par 10.

number = number * 10;
4
répondu Sharun 2017-12-26 19:07:42

Une méthode générale pour arrondir un nombre à un multiple d'un autre nombre, arrondi loin de zéro.

Pour entier

int RoundNum(int num, int step)
{
    if (num >= 0)
        return ((num + (step / 2)) / step) * step;
    else
        return ((num - (step / 2)) / step) * step;
}

Pour float

float RoundNum(float num, float step)
{
    if (num >= 0)
        return floor((num + step / 2) / step) * step;
    else
        return ceil((num - step / 2) / step) * step;
}

Je sais que certaines parties peuvent sembler contre-intuitives ou pas très optimisées. J'ai essayé de lancer (num + step / 2) dans un int, mais cela a donné de mauvais résultats pour les flotteurs négatifs ((int) -12.0000 = -11 et autres). Quoi qu'il en soit, ce sont quelques cas que j'ai testés:

  • tout nombre arrondi à l'étape 1 devrait être lui-même
  • -3 arrondi à l'étape 2 = -4
  • -2 arrondi à l'étape 2 = -2
  • 3 arrondi à l'étape 2 = 4
  • 2 arrondi à l'étape 2 = 2
  • -2,3 arrondi à l'échelon 0,2 = -2,4
  • -2,4 arrondi à l'échelon 0,2 = -2,4
  • 2,3 arrondi à l'échelon 0,2 = 2,4
  • 2,4 arrondi à l'échelon 0,2 = 2,4
3
répondu Chris Maes 2017-12-26 19:51:08