132 votes

Comment puis-je arrondir à 0,5 près?

J'ai pour afficher les cotes et pour cela j'ai besoin incrémente comme suit:

Si le nombre est 1.0, il doit être égal à 1
Si le nombre est de 1,1 doit être égal à 1
Si le nombre est de 1,2 doit être égal à 1
Si le nombre est de 1,3 doit être égal à 1,5
Si le nombre est de 1,4 doit être égal à 1,5
Si le nombre est de 1,5 doit être égal à 1,5
Si le nombre est de 1,6 doit être égal à 1,5
Si le nombre est de 1,7 doit être égal à 1,5
Si le nombre est de 1,8 doit être égale à 2.0
Si le nombre est de 1,9 doit être égale à 2.0
Si le nombre est de 2,0 doit être égale à 2.0
Si le nombre est de 2,1 doit être égale à 2.0
et ainsi de suite...

Est-il un moyen simple de calculer les valeurs nécessaires?

248voto

John Rasch Points 28874

Multipliez votre note par 2, arrondissez ensuite à l'aide de Math.Round(rating, MidpointRounding.AwayFromZero) , puis divisez cette valeur par 2.

81voto

Neil N Points 14566

Multiplier par 2, arrondir, puis diviser par 2

si vous voulez le quart le plus proche, multipliez par 4, divisez par 4, etc.

25voto

NER1808 Points 375

Voici quelques méthodes que j'ai écrites et qui arrondiront toujours à n'importe quelle valeur.

         public static Double RoundUpToNearest(Double passednumber, Double roundto)
    {

        // 105.5 up to nearest 1 = 106
        // 105.5 up to nearest 10 = 110
        // 105.5 up to nearest 7 = 112
        // 105.5 up to nearest 100 = 200
        // 105.5 up to nearest 0.2 = 105.6
        // 105.5 up to nearest 0.3 = 105.6

        //if no rounto then just pass original number back
        if (roundto == 0)
        {
            return passednumber;
        }
        else
        {
            return Math.Ceiling(passednumber / roundto) * roundto;
        }
    }
    public static Double RoundDownToNearest(Double passednumber, Double roundto)
    {

        // 105.5 down to nearest 1 = 105
        // 105.5 down to nearest 10 = 100
        // 105.5 down to nearest 7 = 105
        // 105.5 down to nearest 100 = 100
        // 105.5 down to nearest 0.2 = 105.4
        // 105.5 down to nearest 0.3 = 105.3

        //if no rounto then just pass original number back
        if (roundto == 0)
        {
            return passednumber;
        }
        else
        {
            return Math.Floor(passednumber / roundto) * roundto;
        }
    }
 

1voto

Akash Kava Points 18026
decimal d = // your number..

decimal t = d - Math.Floor(d);
if(t >= 0.3d && t <= 0.7d)
{
    return Math.Floor(d) + 0.5d;
}
else if(t>0.7d)
    return Math.Ceil(d);
return Math.Floor(d);

1voto

Paul Brinkley Points 2664

On dirait que vous devez arrondir à 0,5 près. Je ne vois aucune version de round dans l'API C # qui effectue cela (une version prend un nombre de chiffres décimaux à arrondir, ce qui n'est pas la même chose).

En supposant que vous n'ayez à traiter que des nombres entiers de dixièmes, il suffit de calculer round (num * 2) / 2 . Si vous utilisez des décimales arbitrairement précises, cela devient plus compliqué. Espérons que ce n'est pas le cas.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X