.net 通过强制转换或Convert.ToSingle()将双精度型转换为浮点型?

t3psigkw  于 2023-02-17  发布在  .NET
关注(0)|答案(3)|浏览(154)

在C#中,我可以通过强制转换(float)Convert.ToSingle()将双精度数转换为浮点数。

double x = 3.141592653589793238463;
float a = (float)x;
float b = Convert.ToSingle(x);

ab变得相等。
这两种方法有什么不同吗?我应该选择哪一种,为什么?

umuewwlo

umuewwlo1#

从.NET参考源:

public static float ToSingle(double value)
{
     return (float)value;
}

所以,你的答案是,他们是完全一样的,在引擎盖下。
两者之间的任何偏好都是严格的个人风格选择。就我个人而言,我总是使用演员阵容,因为它更短,而且对我来说似乎更习惯。

kupeojn6

kupeojn62#

虽然它们在强制转换double时完全相同,但如果将double强制转换为object,则会有差异。

object x = 1.0;
float a = (float)x;              //InvalidCastException
float b = Convert.ToSingle(x);   //OK

关于如何完成它的.NET参考源代码在@Glorin提供的答案上面几行。

a9wyjsp7

a9wyjsp73#

根据C#的版本,Convert方法测试值 在转换前为空,如果是,则返回0表示基元数。对于显式转换中的相同情况,将引发异常。
使用Convert方法的替代方法是使用??运算符

float floatValue = nullableFloat ?? 0.0f;

相关问题