Valeurs d'arrondi à la hausse ou à la baisse 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 certain nombre avec beaucoup de chiffres après le point décimal (comme 87.124563563566). Comment pourrais-je arrondir la valeur vers le haut ou vers le bas pour que je puisse avoir quelque chose comme 87.12?

Merci!

32
demandé sur Zach Johnson 2010-04-13 23:56:45

8 réponses

Essayez d'utiliser Math.Ronde. Ses surcharges diverses vous permettent de spécifier combien de chiffres vous voulez et aussi de quelle manière vous voulez qu'il arrondit le nombre.

37
répondu Zach Johnson 2010-04-13 19:57:55

Utiliser Math.Ceiling(87.124563563566) ou Math.Floor(87.124563563566) pour arrondir toujours vers le haut ou vers le bas. Je crois que ça va au numéro entier le plus proche.

88
répondu Jim 2010-04-13 20:04:42

toujours arrondie à 2 décimales:

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

toujours arrondi à 2 décimales:

decimal score = 87.124;
Math.Ceiling(score * 100) / 100; // 87.13
9
répondu Serj Sagan 2016-06-18 08:20:45

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

7
répondu Timurid 2015-04-09 18:51:50
double test2 = 87.2345524523452;
double test3 = Math.Round(test2, 2);
5
répondu Charles Gargent 2010-04-13 20:09:52

le nombre est correct pour double type de variable, et mathématiquement correct.

Vous avez deux bien établir des solutions pour éviter de telles situations.

  1. chaîne de solution: quand vous montrez le nombre aux utilisateurs, faites-le simplement: variable.ToString ("0.00"). Le ToString ne fait que réduire le nombre.
  2. solution d'arrondissement : Si vous souhaitez contrôler l'arrondissement ,vous pouvez utiliser le Math bibliothèque.

je vous voulez savoir pourquoi vous voyez cette "bizarre", et vous pouvez y lire : nombres irrationnels

4
répondu Avram 2015-04-10 16:55:52

je n'ai pas assez de réputation pour ajouter des commentaires, j'ai donc créer une réponse. Mais timurid a raison, il suffit de formater la chaîne.

je pense que la chose que vous cherchez est:

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

certaines des façons personnalisées de formater vos valeurs sont décrites ici: https://msdn.microsoft.com/en-US/library/7x5bacwt (v = 80).aspx

1
répondu Kabwla-TwoLips 2015-04-15 17:48:32

beaucoup de gens vous conseillent d'utiliser la bibliothèque de mathématiques pour arrondir votre chiffre, mais même cela peut entraîner des erreurs mineures d'arrondissement. Mathématique.Round peut, et parfois retourne des nombres avec un certain nombre de zéros de queue et de très petites erreurs de round off. C'est parce que, à l'intérieur, les flotteurs et les doubles sont toujours représentés comme des nombres binaires, et il peut donc être souvent difficile de représenter certains petits nombres décimaux proprement.

votre meilleure option est d'utiliser uniquement string le formatage ou, si vous ne le souhaitez à fait ronde, combiner les deux:

Math.Round(val, 2).ToString("0.00")
0
répondu Psymunn 2015-04-15 22:38:00