将double转换为int

时间:2010-11-15 06:27:40

标签: c# .net casting type-conversion

double转换为int的最佳方式是什么?是否应该使用演员?

10 个答案:

答案 0 :(得分:209)

如果您想要默认的truncate-to-zero行为,则可以使用强制转换。或者,您可能希望使用Math.CeilingMath.RoundMath.Floor等 - 尽管您之后仍需要演员。

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

答案 1 :(得分:36)

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

答案 2 :(得分:29)

是的,为什么不呢?

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

使用Convert类也很有效。

int someOtherInt = Convert.ToInt32(someDouble);

答案 3 :(得分:7)

Convert.ToInt32是转换

的最佳方式

答案 4 :(得分:3)

最好的方法是使用Convert.ToInt32。它很快,也可以正确地进行舍入。

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

答案 5 :(得分:2)

我认为最好的方法是Convert.ToInt32

答案 6 :(得分: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

答案 7 :(得分:1)

int myInt =(int)Math.Ceiling(myDouble);

答案 8 :(得分:0)

我的方式是:

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

答案 9 :(得分:0)

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

如果您想将其发送到标签或其他内容,并且您不想要任何小数组件,这是最佳方式

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

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