将C#数字类型从一种类型转换为另一种类型的学术途径是什么



根据我的测试,将小数或双精度转换为int或long只需保留数字的整数部分,并丢弃小数部分。相反,您可以有一个int变量,并在不进行强制转换的情况下将其直接赋给十进制变量,它将执行隐式转换。

它是有效的,但并不总是因为它有效就意味着它是最好的方法。这种类型的转换是否有任何性能影响,或者最好使用Convert。ToWhatever()?

转换。ToWhatever()的性能可能会降低。真正的问题是,无论你可能对性能有什么影响,都将是如此微小,以至于这是一个边缘案例。如果数字转换是一个性能问题,那么可能还有另一种解决方案会更有帮助,更好地利用您的时间/金钱。

您需要将decimal转换为int或double转换为int,因为转换会导致精度损失,因此,与其让您无意中执行有损操作,不如明确表示。

反过来说,双精度或小数可以完全表示从int赋值的任何值,因此可以代表您隐式进行转换。

唯一的问题是,演员阵容是否进行了您需要的转换,即简单地截断分数部分是否足够,或者您是否需要特定的舍入等。

就性能而言,double到int的强制转换只使用conv.i4操作码,其中使用Convert之类的操作码。ToInt32(double)导致函数调用以执行转换。

对于decimal到int,强制转换将导致对运算符重载的调用,本质上是一个函数调用,当然还使用Convert。ToInt32(十进制)又是一个函数调用。

在十进制的情况下,基本上没有区别,但转换。ToInt32(double)甚至不会被内联,因此它的成本要高得多,但从更大的角度来看,成本是显著的,通常不会。

为什么不简单地使用Math.Round()将十进制或双精度转换为int?

请注意,Math.Round()仍然返回十进制/双精度,但现在已正确四舍五入,因此可以将其强制转换为int

相关内容

最新更新