Joh*_*han 251

double d = 1.234;
int i = Convert.ToInt32(d);
Run Code Online (Sandbox Code Playgroud)

参考

处理四舍五入如下:

四舍五入到最近的32位有符号整数.如果值在两个整数之间,则返回偶数; 也就是说,4.5转换为4,5.5转换为6.

  • @JimBalter由于零不是舍入的,舍入到一半的确会引入正偏差,因此它被称为非对称舍入.如果您的分布足够均匀并且舍入不会偏向偶数或不均匀的数字,则"圆半到均匀"不会.见[中途四舍五入](http://en.wikipedia.org/wiki/Rounding#Tie-breaking). (11认同)
  • @罗伯特 - koritnik.不知道为什么那个"无效".OP没有指定一个首选的舍入规则,而"round .5 to nearest even"是回溯的标准规则.总是向上舍入会产生不必要的统计影响. (9认同)
  • @Keith:但它无效地将**甚至5**转换为*偶数*而不是*偶数+ 1*... (8认同)
  • 更好的是`Math.Round`,因为它根据需要返回一个int. (7认同)
  • "总是四舍五入有不必要的统计效应" - 这简直是错误的.舍入.5向上舍入正好一半的数字 - "[0,.5)" - 向下,正好是数字的一半 - "[.5,1)" - 向上.舍入甚至略微偏向偶数,因为它将`(.5,1.5)`舍入为1但是[1.5,2.5]`舍入为2. (3认同)

nic*_*ckf 78

使用Math.round(),可能与...结合使用MidpointRounding.AwayFromZero

例如:

Math.Round(1.2) ==> 1
Math.Round(1.5) ==> 2
Math.Round(2.5) ==> 2
Math.Round(2.5, MidpointRounding.AwayFromZero) ==> 3
Run Code Online (Sandbox Code Playgroud)

  • 实际上不会生成整数,而是生成一个整数. (194认同)
  • @Ronnie - 不,这是设计的.默认情况下,Math.Round会将中点数(x + .5)舍入到最接近的*偶数*.如果您想要不同的行为,则必须通过标志指定它.http://msdn.microsoft.com/en-us/library/system.midpointrounding.aspx (13认同)
  • 不会`Convert.ToInt32()`执行相同的操作,还是只删除小数点后的所有内容? (6认同)
  • 嗯,我从来没有!:) (6认同)
  • 如果你需要一个整数,可以使用`Convert.ToInt16(NumberToConvert);`````可以用'32`或`64`代替. (4认同)
  • Double不是Int. (4认同)
  • 有没有其他人一直被这种默认行为绊倒? (3认同)
  • 只需简单地将 double *cast* 为 int,就像 `(int)Math.Round(value);` (2认同)

小智 36

你也可以使用功能:

//Works with negative numbers now
static int MyRound(double d) {
  if (d < 0) {
    return (int)(d - 0.5);
  }
  return (int)(d + 0.5);
}
Run Code Online (Sandbox Code Playgroud)

根据架构,它的速度要快几倍.

  • 有关负数的奇怪行为,请参阅@ Eternal21的评论(MyRound(-1.2)= 0) (3认同)
  • 对于任何想知道的人,@ Chris提到的问题现在可以通过检查该值是否为负来解决。 (2认同)

小智 12

double d;
int rounded = (int)Math.Round(d);
Run Code Online (Sandbox Code Playgroud)


Tre*_*ent 5

我知道这个问题很旧,但是在寻找类似问题的答案时遇到了它。我想我会分享给我的非常有用的提示。

转换为int时,只需.5在向下转换前添加您的值即可。由于向下转换int始终下降到较小的数字(例如(int)1.7 == 1),因此,如果您的数字大于或等于该数字,则.5添加.5将其带入下一个数字,而向下转换为的数字int应返回正确的值。(例如(int)(1.8 + .5) == 2

  • 问题是如果您尝试以这种方式转换负值。例如,-1.25最终将等于0。(-1.25 + 0.5 = 0.75,并且一旦转换为整数,它就是0)。因此,您需要从负值中减去0.5。 (13认同)