8
votes

Math.Round avec paramètre négatif

Tout,

J'essaie de convertir le code Borland C ++ en C #. Dans l'ancien code, je vois ce qui suit: xxx

regardant la documentation de Borland, je vois que ce tourne () accepte les paramètres positifs et négatifs pour la précision. Des moyens positifs rond à 10 ^ n, négatif - à 10 ^ -n.

regarder la documentation C # de maths.Roundto () Je ne peux pas trouver une référence si elle acceptera des nombres négatifs pour la précision. Et tous les échantillons sont présentés avec les nombres positifs.

Quelle est la bonne façon de convertir le code dans ce cas? Devrais-je juste oublier le signe et écrire: xxx

merci.


0 commentaires

3 Réponses :


4
votes

Math.Round pour les doubles en C # ne peut pas accepter les valeurs négatives pour chiffres (en fait, il est documenté dans cette page même de lancer une argumentOfrangeException si les chiffres sont inférieurs à 0 ou supérieur à 15)

Le paramètre est dans le cas de Math.Round, demandant un certain nombre de chiffres fractionnaires, ce qui signifie que le signe du paramètre serait inversé, donc dans votre cas, oui, xxx

serait une traduction correcte du paramètre A -2.


1 commentaires

En tant que note mineure, le Borland rond-rond de et le C # rond Faites l'arrondissement du banker par défaut, alors rien à craindre à ce sujet.



2
votes

Avez-vous essayé? J'ai fait une exception: xxx


0 commentaires

5
votes

Je ne suis pas au courant d'une solution intégrée au type d'arrondi que vous cherchez à faire, mais cela ne signifie pas qu'il n'y en a pas quelque part. Une solution rapide serait de créer une méthode ou même une méthode d'extension pour faire ce que vous recherchez:

double DoubleRound(double value, int digits)
{
    if (digits >= 0)
    {
        return Math.Round(value, digits);
    }
    else
    {
        digits = Math.Abs(digits);
        double temp = value / Math.Pow(10, digits);
        temp = Math.Round(temp, 0);
        return temp * Math.Pow(10, digits);
    }
}


0 commentaires