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

SOF*_*ser 83 c# rounding

我怎样才能像这样舍入值:

1.1 => 1
1.5 => 2
1.9 => 2
Run Code Online (Sandbox Code Playgroud)

__CODE__没有帮助我.有任何想法吗?

Onl*_*ere 185

有关更多信息,请参阅官方文档 例如:

基本上你给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
Run Code Online (Sandbox Code Playgroud)

现场演示

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

  • 另一方面,使用`远离零'也意味着`-1.5`将舍入为'-2`. (14认同)
  • 我发现Math.Round(1.5,0)返回2 (3认同)
  • 使用Math.Ceiling,将Math.Round用于摩擦不是一个好习惯,请阅读:http://stackoverflow.com/questions/9221205/why-does-system-midpointrounding-awayfromzero-not-round-up-in-这个实例, (2认同)
  • @sam 可能除以 10,然后用 Math.Ceiling 舍入,最后乘以 10? (2认同)

dev*_*oms 60

Math.Ceiling
Run Code Online (Sandbox Code Playgroud)

总是向上(向天花板)

Math.Floor
Run Code Online (Sandbox Code Playgroud)

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

你所追求的只是简单

Math.Round
Run Code Online (Sandbox Code Playgroud)

根据这篇文章回合


das*_*ght 7

你需要Math.Round,没有Math.Ceiling.Ceiling总是"向上",Round然后根据小数点后的值向上或向下舍入.


dav*_*and 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);
Run Code Online (Sandbox Code Playgroud)

只需将0.5添加到任何数字,并将其转换为int(或将其置于地板),它将在数学上正确舍入:D


Mar*_*lon 5

您可以按照其他人的建议使用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
Run Code Online (Sandbox Code Playgroud)


Kos*_*mas 5

只是提醒.小心双倍.

Math.Round(0.3 / 0.2 ) result in 1, because in double 0.3 / 0.2 = 1.49999999
Math.Round( 1.5 ) = 2
Run Code Online (Sandbox Code Playgroud)