将double转换为int

use*_*949 141 .net c# casting type-conversion

将a转换为a的最佳方法doubleint什么?是否应该使用演员?

Jon*_*eet 219

如果您希望默认的truncate-to-zero行为,则可以使用强制转换.或者,你可能想使用Math.Ceiling,Math.Round,Math.Floor等-但你仍然需要铸造之后.

不要忘记,范围int远小于范围double.如果值超出未经检查的上下文中的范围,则来自doubleto 的强制转换int不会抛出异常int,而对Convert.ToInt32(double)will 的调用则不会.如果值超出范围,则显式未定义强制转换的结果(在未经检查的上下文中).

  • @user:无论你使用的是32位还是64位机器,`int`的大小总是32位. (24认同)
  • @ user1290746:这样可行,但你通常只需要在文件顶部使用System;`,这时它可能只是`intVal = Convert.ToInt32(Math.Floor(dblVal));` (9认同)
  • 对于像我这样的C#noobs:Math和Convert都是System的一部分.所以完整的答案如下:`intVal = System.Convert.ToInt32(System.Math.Floor(dblVal));` (6认同)
  • @ user1290746:但在这种情况下,我不认为正确的解决方案是建议人们使用完全限定的名称 - 更好的解决方案是了解`using`指令. (3认同)
  • 并且双打甚至比64位int还要多. (2认同)

Arm*_*yan 37

如果你使用强制转换,也就是说,(int)SomeDouble你将截断小数部分.也就是说,如果SomeDouble是4.9999,结果将是4,而不是5.转换为int不会使数字四舍五入.如果你想要四舍五入使用Math.Round


Jef*_*ado 30

是的,为什么不呢?

double someDouble = 12323.2;
int someInt = (int)someDouble;
Run Code Online (Sandbox Code Playgroud)

使用Convert该类也很有效.

int someOtherInt = Convert.ToInt32(someDouble);
Run Code Online (Sandbox Code Playgroud)


小智 8

最好的方法就是简单地使用Convert.ToInt32. 它速度快而且舍入正确。

为什么要让它变得更复杂呢?


ani*_*key 7

Convert.ToInt32 是最好的转换方式