将double
转换为int
的最佳方式是什么?是否应该使用演员?
答案 0 :(得分:209)
如果您想要默认的truncate-to-zero行为,则可以使用强制转换。或者,您可能希望使用Math.Ceiling
,Math.Round
,Math.Floor
等 - 尽管您之后仍需要演员。
不要忘记int
的范围远小于double
的范围。如果值在未经检查的上下文中超出double
的范围,则int
到int
的强制转换不会抛出异常,而对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,那就总是那样