在C#中向上或向下舍入值

c11*_*ada 33 c# numbers rounding

我创造了一款在游戏结束时得分的游戏,但问题是该得分有时是小数点后有很多位数的数字(如87.124563563566).我将如何进行四舍五入或更低的值,以便我可以得到像87.12这样的东西?

谢谢!

Jim*_*Jim 93

使用Math.Ceiling(87.124563563566)Math.Floor(87.124563563566)始终向上舍入或向下舍入.我相信这是最接近的整数.


Zac*_*son 37

尝试使用Math.Round.它的各种重载允许您指定所需的位数以及您希望它对数字进行舍入的方式.

  • 你最有可能想要使用`Math.Round(87.123453563566,2,MidpointRounding.AwayFromZero);`. (14认同)

Ser*_*gan 12

要始终向下舍入到2位小数:

decimal score = 87.126;
Math.Floor(score * 100) / 100; // 87.12
Run Code Online (Sandbox Code Playgroud)

要始终舍入到2位小数:

decimal score = 87.124;
Math.Ceiling(score * 100) / 100; // 87.13
Run Code Online (Sandbox Code Playgroud)


Tim*_*rid 7

你只想格式化字符串,而不是破坏分数.


Cha*_*ent 5

double test2 = 87.2345524523452;
double test3 = Math.Round(test2, 2);
Run Code Online (Sandbox Code Playgroud)


Avr*_*ram 5

该数字适合double变量类型,并且在数学上是正确的。
您有两个完善的解决方案来避免此类情况。

  1. 字符串解决方案:当您向用户显示数字时,只需执行以下操作:variable.ToString("0.00")。ToString 只是剪切数字。
  2. 舍入解决方案:如果您想控制舍入,可以使用该Math库。

我想知道为什么你会看到这个“奇怪”的数字,你可以在那里阅读:无理数