如何在C#中最接近的整数

我怎样才能像这样的值:

1.1 => 1 1.5 => 2 1.9 => 2 

Math.Ceiling()不帮助我。 有任何想法吗?

查看更多官方文档 。 例如:

基本上你给了Math.Round方法三个参数。

  1. 你想要的值。
  2. 值之后要保留的小数位数。
  3. 您可以调用一个可选参数来使用AwayFromZero四舍五入。 ( 除非四舍五入,例如1.5

示例代码:

 var roundedA = Math.Round(1.1, 0); // Output: 1 var roundedB = Math.Round(1.5, 0, MidpointRounding.AwayFromZero); // Output: 2 var roundedC = Math.Round(1.9, 0); // Output: 2 var roundedD = Math.Round(2.5, 0); // Output: 2 var roundedE = Math.Round(2.5, 0, MidpointRounding.AwayFromZero); // Output: 3 var roundedF = Math.Round(3.49, 0, MidpointRounding.AwayFromZero); // Output: 3 

现场演示

如果要将.5值四舍五入,则需要MidpointRounding.AwayFromZero 。 不幸的是,这不是Math.Round()的默认行为。 如果使用MidpointRounding.ToEven (默认值),则将该值舍入到最接近的偶数1.5被舍入为2 ,但2.5也舍入为2 )。

 Math.Ceiling 

总是四舍五入(朝天花板)

 Math.Floor 

总是向下(往地面)

你所追求的是简单的

 Math.Round 

根据这个职位轮转

有这个手册,也有点可爱的方式:

 double d1 = 1.1; double d2 = 1.5; double d3 = 1.9; int i1 = (int)(d1 + 0.5); int i2 = (int)(d2 + 0.5); int i3 = (int)(d3 + 0.5); 

只需将0.5添加到任何数字,然后将其转换为int(或floor),并将在math上正确舍入:D

你需要Math.Round ,而不是Math.CeilingCeiling总是“回合”,而Round取决于小数点后的值向上或向下取整。

只是提醒。 谨防双重。

 Math.Round(0.3 / 0.2 ) result in 1, because in double 0.3 / 0.2 = 1.49999999 Math.Round( 1.5 ) = 2 

您可以像其他人所build议的那样使用Math.Round(推荐),或者您可以添加0.5并将其转换为一个int(这会减less小数部分)。

 double value = 1.1; int roundedValue = (int)(value + 0.5); // equals 1 double value2 = 1.5; int roundedValue2 = (int)(value2 + 0.5); // equals 2 

你有Math.Round函数,正是你想要的。

 Math.Round(1.1) results with 1 Math.Round(1.8) will result with 2.... and so one. 

使用Math.Round

 double roundedValue = Math.Round(value, 0) 

如果它已经可以被5整除,则这个数字会舍入到最接近的5

 public static double R(double x) { // markup to nearest 5 return (((int)(x / 5)) * 5) + ((x % 5) > 0 ? 5 : 0); } 

我正在寻找这个,但我的例子是采取一个数字,如4.2769,并在一个跨度只有4.3。 不完全一样,但如果这有助于:

 Model.Statistics.AverageReview <= it's just a double from the model 

然后:

 @Model.Statistics.AverageReview.ToString("n1") <=gives me 4.3 @Model.Statistics.AverageReview.ToString("n2") <=gives me 4.28 

等等…

如果你使用整数而不是浮点数,那么就是这样。

 #define ROUNDED_FRACTION(numr,denr) ((numr/denr)+(((numr%denr)<(denr/2))?0:1)) 

这里“numr”“denr”都是无符号整数。

 var roundedVal = Math.Round(2.5, 0); 

它会给出结果:

 var roundedVal = 3 

使用Math.Round(number)四舍五入到最近的整数。

 decimal RoundTotal = Total - (int)Total; if ((double)RoundTotal <= .50) Total = (int)Total; else Total = (int)Total + 1; lblTotal.Text = Total.ToString();