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

时间:2010-04-13 19:56:46

标签: c# numbers rounding

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

谢谢!

8 个答案:

答案 0 :(得分:91)

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

答案 1 :(得分:37)

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

答案 2 :(得分:10)

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

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

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

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

答案 3 :(得分:7)

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

答案 4 :(得分:5)

double test2 = 87.2345524523452;
double test3 = Math.Round(test2, 2);

答案 5 :(得分:4)

对于double类型的变量,该数字是正常的,并且在数学上是正确的 你有两个完善的解决方案来避免这种情况。

  1. 字符串解决方案:向用户显示数字时,只需执行此操作:variable.ToString(" 0.00")。 ToString只是减少数量。
  2. 舍入解决方案:如果要控制舍入,可以使用Math库。
  3. 我想知道为什么你会看到这个"怪异的"数字,您可以在那里阅读:irrational numbers

答案 6 :(得分:1)

我没有足够的声誉来添加评论,所以我必须创建一个答案。 但是timurid是对的,只是格式化字符串。

我认为您正在寻找的是:

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

此处描述了一些格式化值的自定义方法: https://msdn.microsoft.com/en-US/library/7x5bacwt(v=vs.80).aspx

答案 7 :(得分:0)

很多人都在鼓励你使用数学库来舍入你的数字,但即使这样也会导致非常小的舍入错误。 Math.Round可以,有时会返回带有许多尾随零和非常小的舍入错误的数字。这是因为,在内部,浮点数和双精度数仍然表示为二进制数,因此通常很难干净地表示某些小的十进制数。

您最好的选择是要么只使用字符串格式化,要么如果您确实希望它实际上是圆形,请将两者合并:

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