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!
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.
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.
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
vous voulez juste formater la chaîne, pas corrompre la partition.
double test2 = 87.2345524523452;
double test3 = Math.Round(test2, 2);
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.
- 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.
- 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
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
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")