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

时间:2012-01-13 01:11:26

标签: c# rounding

如何将值舍入到最接近的整数?

例如:

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

“Math.Ceiling()”对我没有帮助。有什么想法吗?

15 个答案:

答案 0 :(得分:176)

有关详情,请参阅official documentation。例如:

基本上,您为Math.Round方法提供了三个参数。

  1. 您要舍入的值。
  2. 要在值之后保留的小数位数。
  3. 您可以调用以使用AwayFromZero舍入的可选参数。 (忽略,除​​非舍入不明确,例如1.5
  4. 示例代码:

    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
    

    Live Demo

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

答案 1 :(得分:57)

Math.Ceiling

总是向上(朝向天花板)

Math.Floor

总是向下舍入(朝向地板)

你所追求的只是

Math.Round

根据this post

进行舍入

答案 2 :(得分:7)

您需要Math.Round,而不是Math.CeilingCeiling始终“向上”,而Round向上或向下舍入取决于小数点后的值。

答案 3 :(得分:6)

这本手册,也有点可爱:

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(或将其放置),它将在数学上正确舍入:D

答案 4 :(得分:5)

提醒一下。小心双倍。

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

答案 5 :(得分:4)

您可以像其他人建议的那样使用Math.Round(推荐),或者您可以添加0.5并转换为int(将删除小数部分)。

double value = 1.1;
int roundedValue = (int)(value + 0.5); // equals 1

double value2 = 1.5;
int roundedValue2 = (int)(value2 + 0.5); // equals 2

答案 6 :(得分:3)

你有Math.Round函数可以完全按照自己的意愿运行。

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

答案 7 :(得分:2)

如果它已被5整除,则将向上舍入到最接近的5或不变化。

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

答案 8 :(得分:1)

使用Math.Round

double roundedValue = Math.Round(value, 0)

答案 9 :(得分:1)

我一直在寻找这个,但我的例子是拿一个数字,比如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

等...

答案 10 :(得分:1)

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

它会给出结果:

var roundedVal = 3

答案 11 :(得分:0)

如果你使用整数而不是浮点数,这就是方法。

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

此处“numr”“denr”都是无符号整数。

答案 12 :(得分:0)

使用Math.Round(number)轮到最近的整数。

答案 13 :(得分:0)

编写自己的圆方法。像,

function round(x) rx = Math.ceil(x) if (rx - x <= .000001) return int(rx) else return int(x) end

答案 14 :(得分:-1)

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