将 double 转换为 int

Posted

技术标签:

【中文标题】将 double 转换为 int【英文标题】:convert double to int 【发布时间】:2011-05-10 01:51:52 【问题描述】:

double 转换为int 的最佳方法是什么?应该使用演员表吗?

【问题讨论】:

定义“最佳”。取决于你是否想要向上/向下舍入等。 @RPM1984:定义etc. :) @Armen - touche` :) 无论如何都没关系 - Skeet 在这里,其他都不重要。 【参考方案1】:

如果您想要默认截断为零的行为,您可以使用强制转换。或者,您可能想要使用 Math.CeilingMath.RoundMath.Floor 等 - 尽管之后您仍然需要演员表。

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

【讨论】:

@user:int 的大小始终为 32 位,无论您使用的是 32 位还是 64 位机器。 而且双精度数甚至比 64 位整数还要大。 对于像我这样的 C# 菜鸟:数学和转换都是系统的一部分。所以完整的答案看起来像这样:intVal = System.Convert.ToInt32(System.Math.Floor(dblVal)); @user1290746:可以,但您通常只会在文件顶部有using System;,此时它可能只是intVal = Convert.ToInt32(Math.Floor(dblVal)); @user1290746:但在这种情况下,我认为建议人们使用完全限定名称不是正确的解决方案 - 更好的解决方案是了解 using 指令。跨度> 【参考方案2】:

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

【讨论】:

【参考方案3】:

是的,为什么不呢?

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

使用Convert 类也很有效。

int someOtherInt = Convert.ToInt32(someDouble);

【讨论】:

【参考方案4】:

Convert.ToInt32是最好的转化方式

【讨论】:

这是一个典型的不安全函数,因为它只接受任何东西。【参考方案5】:

最好的方法是简单地使用Convert.ToInt32。它速度很快,也可以正确地四舍五入。

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

【讨论】:

【参考方案6】:

我的方法是:

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

【讨论】:

你不觉得第三种方式过于复杂和缓慢吗? 第三个不适用于带有小数部分的双打。例如,double_value = 0.1 我认为你可以使用 Math.Floor。【参考方案7】:

这是一个完整的例子

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

【讨论】:

【参考方案8】:

没有一个代码示例表现出学生所期望的正常行为(一半被四舍五入)。大多数人所期望的是:

double d = 1.5;
int i = (int)Math.Round(d, MidpointRounding.AwayFromZero);

【讨论】:

【参考方案9】:

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

【讨论】:

【参考方案10】:

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

【讨论】:

【参考方案11】:
label8.Text = "" + years.ToString("00") + " years";

当您想将其发送到标签或其他东西,并且您不想要任何小数部分时,这是最好的方法

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

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

【讨论】:

这肯定是不是最好的方法,你可能应该收回你的答案。通过使用ToString,您在幕后更新了许多其他昂贵的资源,例如用于特殊目的的字符串格式化程序和解析器。从这里给出的答案中学习。最接近的最佳方法是转换为 int 并截断小数部分或使用 Math.Round 之类的东西来获得您正在寻找的最接近的 int

以上是关于将 double 转换为 int的主要内容,如果未能解决你的问题,请参考以下文章

在QT中如何将double转换为Qstring

将 double 转换为 Int,向下舍入

将 int 变量转换为 double

将 double 转换为 int 数组

将 double 转换为 int

Scala 如何将 Int 转换为 Double?