web-dev-qa-db-fra.com

Arrondir les valeurs vers le haut ou le bas en C #

J'ai créé un jeu qui donne un score à la fin du jeu, mais le problème est que ce score est parfois un nombre avec beaucoup de chiffres après le point décimal (comme 87.124563563566). Comment ferais-je pour arrondir la valeur de manière à obtenir quelque chose comme 87.12?

Merci!

32
c11ada

Essayez d’utiliser Math.Round . Ses diverses surcharges vous permettent de spécifier le nombre de chiffres que vous souhaitez et la manière dont vous voulez arrondir le nombre.

37
Zach Johnson

Utilisez Math.Ceiling(87.124563563566) ou Math.Floor(87.124563563566) pour toujours arrondir les chiffres. Je crois que cela va au nombre entier le plus proche.

90
Jim

Pour arrondir toujours à 2 décimales:

decimal score = 87.126;
Math.Floor(score * 100) / 100; // 87.12

Pour arrondir toujours jusqu'à 2 décimales:

decimal score = 87.124;
Math.Ceiling(score * 100) / 100; // 87.13
9
Serj Sagan

Vous voulez juste formater la chaîne, pas pour corrompre la partition.

7
Timurid
double test2 = 87.2345524523452;
double test3 = Math.Round(test2, 2);
5
Charles Gargent

Le nombre est correct pour le type double et variable mathématiquement.
Vous avez deux solutions bien établies pour éviter de telles situations. 

  1. string solution: lorsque vous montrez le numéro aux utilisateurs, faites-le simplement: variable.ToString ("0.00"). Le ToString est juste en train de couper le nombre. 
  2. solution d'arrondi: Si vous souhaitez contrôler l'arrondi, vous pouvez utiliser la bibliothèque Math.

Si vous voulez savoir pourquoi vous voyez ce nombre "étrange", vous pouvez y lire: nombres irrationnels

4
Avram

Je n'ai pas assez de réputation pour ajouter des commentaires, je dois donc créer une réponse . Mais timurid a raison, formatez simplement la chaîne.

Je pense que la chose que vous recherchez est:

var myScore = 87.124563563566
var toShowOnScreen = myScore.ToString("0.00");

Certaines des manières personnalisées de formater vos valeurs sont décrites ici: https://msdn.Microsoft.com/en-US/library/7x5bacwt(v=vs.80).aspx

1
Kabwla-TwoLips

Beaucoup de gens vous recommandent d’utiliser la bibliothèque mathématique pour arrondir votre numéro, mais même cela peut entraîner des erreurs d’arrondi mineures Math.Round peut, et renvoie parfois des nombres avec un nombre de zéros bas et des très petits arrondis. hors erreurs. En effet, en interne, les flottants et les doubles sont toujours représentés sous forme de nombres binaires. Il est donc souvent difficile de représenter clairement certains petits nombres décimaux.

Votre meilleure option consiste à utiliser uniquement le formatage de chaîne ou, si vous le souhaitez, à combiner les deux:

Math.Round(val, 2).ToString("0.00")
0
Psymunn