将double转换为int


Answers:


237

如果您想要默认的truncate-towards-零行为,则可以使用强制类型转换。或者,你可能想使用Math.CeilingMath.RoundMath.Floor等-但你仍然需要铸造之后。

不要忘记的范围int比的范围小得多double。如果在未经检查的上下文中值超出的范围,则从doubleto 进行强制转换int将不会引发异常int,而对Convert.ToInt32(double)will 的调用。如果值超出范围,则强制转换的结果(在未经检查的上下文中)将明确未定义。


24
@user:的大小int始终为32位,无论您使用的是32位还是64位计算机。
Joren

3
而且双精度甚至比64位int大得多。
Adrian Ratnapala

7
对于像我这样的C#新手:Math和Convert都是System的一部分。因此,完整的答案如下所示:intVal = System.Convert.ToInt32(System.Math.Floor(dblVal));
克里斯(Kris)

9
@ user1290746:这行得通,但通常只需要using System;放在文件的顶部即可,这时可能是intVal = Convert.ToInt32(Math.Floor(dblVal));
Jon Skeet

3
@ user1290746:但是,在那种情况下,我认为正确的解决方案不是建议人们使用完全限定的名称-更好的解决方案是学习using指令。
乔恩·斯基特

39

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


34

是的,为什么不呢?

double someDouble = 12323.2;
int someInt = (int)someDouble;

使用Convert该类也很好。

int someOtherInt = Convert.ToInt32(someDouble);


4

最好的方法是简单地使用Convert.ToInt32。它既快速又可以正确取整。

为什么要使其更复杂?


2

这是一个完整的例子

class Example 
{    
  public static void Main() 
  {    
    double x, y; 
    int i; 

    x = 10.0; 
    y = 3.0; 

    // cast double to int, fractional component lost (Line to be replaced) 
    i = (int) (x / y); 
    Console.WriteLine("Integer outcome of x / y: " + i); 
  }    
}

如果要将数字四舍五入为更接近的整数,请执行以下操作:

i = (int) Math.Round(x / y); // Line replaced



0

我的方式是:

 - Convert.ToInt32(double_value)
 - (int)double_value
 - Int32.Parse(double_value.ToString());

11
您不认为第三种方法不必要地复杂而缓慢吗?
Armen Tsirunyan

6
第三部分不适用于带小数部分的双打。例如,double_value = 0.1
Jeff Mercado 2010年

我认为您可以使用Math.Floor。
lindexi

0
label8.Text = "" + years.ToString("00") + " years";

当您想将其发送到标签等上,而又不需要任何小数部分时,这是最好的方法

label8.Text = "" + years.ToString("00.00") + " years";

如果你只想要2,那总是这样

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.