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

C# 将C数类型从一种转换为另一种的学术途径是什么?,c#,types,numbers,C#,Types,Numbers,根据我的测试,将十进制或双精度转换为int或long只会保留数字的整数部分,而丢弃十进制部分。相反,您可以拥有一个int变量并直接将其分配给十进制变量,而无需强制转换,它将执行隐式转换 它是有效的,但并不总是因为它有效就意味着它是最好的方法。这种类型的转换是否会影响性能,或者最好使用Convert.ToWhatever()?您需要十进制转换为int或双精度转换为int,因为转换会导致精度损失,因此,不要让您无意中执行有损操作,而是希望您明确地了解它 反过来说,双精度或十进制可以完全表示从int指

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


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

您需要十进制转换为int或双精度转换为int,因为转换会导致精度损失,因此,不要让您无意中执行有损操作,而是希望您明确地了解它

反过来说,双精度或十进制可以完全表示从int指定的任何值,因此可以隐式地代表您进行转换

唯一的问题是,演员是否做了你需要的那种转换,即简单地截断分数部分就足够了,或者你需要具体的舍入等等

就性能而言,将double转换为int只需使用
conv.i4
操作码,其中使用类似Convert.ToInt32(double)的内容会导致执行转换的函数调用

对于decimal to int,强制转换将导致调用运算符重载,本质上是函数调用,当然,使用Convert.ToInt32(decimal)也是函数调用


十进制基本上没有区别,但Convert.ToInt32(double)甚至不会内联,因此成本要高得多,但从更大的角度来看,成本很高,通常不会。

您需要将十进制转换为int或double转换为int,因为转换会导致精度损失,因此,不要让您无意中执行有损操作,而是希望您明确地了解它

反过来说,双精度或十进制可以完全表示从int指定的任何值,因此可以隐式地代表您进行转换

唯一的问题是,演员是否做了你需要的那种转换,即简单地截断分数部分就足够了,或者你需要具体的舍入等等

就性能而言,将double转换为int只需使用
conv.i4
操作码,其中使用类似Convert.ToInt32(double)的内容会导致执行转换的函数调用

对于decimal to int,强制转换将导致调用运算符重载,本质上是函数调用,当然,使用Convert.ToInt32(decimal)也是函数调用


对于十进制,基本上没有区别,但是Convert.ToInt32(double)甚至不会内联,因此它的成本要高得多,但从更大的角度来看,成本是否显著,通常不是。

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


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

为什么不直接使用
Math.Round()
将十进制或双精度转换为int


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

Convert.ToWhatever()的性能可能会降低。真正的问题是,无论您可能对性能有什么影响,都将是微不足道的,这是一个边缘案例。如果数字转换是一个性能问题,那么可能有另一个解决方案会更有用,更好地利用您的时间/金钱

Convert.ToWhatever()的性能可能会降低。真正的问题是,无论您可能对性能有什么影响,都将是微不足道的,这是一个边缘案例。如果数字转换是一个性能问题,那么可能有另一个解决方案会更有用,更好地利用您的时间/金钱

我认为问题更多的是围绕着哪一个更有效;显式/隐式“强制转换”或Convert.ToXYZ()方法。关于扩展/缩小转换的好信息。问题是我们有一个返回double的服务调用,但是我们必须将其值转换为int,因为我们分配给它的对象属性是int。我知道为什么必须将基于精度的数字转换为非基于精度的数字,但我只是想知道转换数字类型的最佳实践方法是什么。似乎只要我不担心任何舍入,将双精度转换为整数就可以了,对吗?@oscilatingcretin,我希望我在编辑中已经解决了您的问题。但是,如果你能得到你想要的结果,那么使用演员阵容是正确的做法。这会奏效的。谢谢仅供参考,我必须进入IE9的兼容模式才能将您的答案标记为答案。必须爱微软=\我认为问题更多的是关于哪一个更有效;显式/隐式“强制转换”或Convert.ToXYZ()方法。关于扩展/缩小转换的好信息。问题是我们有一个返回double的服务调用,但是我们必须将其值转换为int,因为我们分配给它的对象属性是int。我知道为什么必须将基于精度的数字转换为非基于精度的数字,但我只是想知道转换数字类型的最佳实践方法是什么。似乎只要我不担心任何舍入,将双精度转换为整数就可以了,对吗?@oscilatingcretin,我希望我在编辑中已经解决了您的问题。但是,如果你能得到你想要的结果,那么使用演员阵容是正确的做法。这会奏效的。谢谢仅供参考,我必须进入IE9的兼容模式才能将您的答案标记为a