是否有理由在 C# 中始终声明类型后缀为“f”的浮点数
本文关键字:后缀 浮点数 类型 声明 有理由 是否 | 更新日期: 2023-09-27 18:34:33
创建浮点变量时,整数不需要类型后缀,即所有这些都是有效的:
public float distance = 3;
public float distance = 3f;
public float distance = 0.3f;
有理由使用3f
而不是3
吗?编译器是否足够智能,可以将类型识别为 float 并自动强制转换它?
相关问题:为什么我们应该在 C# 中使用文字以及为什么在声明浮点数时需要"f">
两者都解释了为什么我们需要使用类型后缀"f",但是有没有一种"正确"的方式来声明具有整数值的浮点数?一种方式更有效吗?
下面是允许的隐式数字转换列表。 当目标类型可以保存原始类型范围时,允许隐式转换。 在这种情况下,float distance = 0.3;
是一个错误,因为浮点范围无法容纳双精度范围。
至于效率,在3
和3f
之间,编译器应该为您优化。
IL_0001: ldc.r4 3. // float distance1 = 3;
IL_0006: stloc.0
IL_0007: ldc.r4 3. // float distance2 = 3f;
IL_000c: stloc.1
Pragmatics。f 不是必需的。但是,请注意,没有"f"后缀的小数点数被解释为双精度,这是一种更精确但内存昂贵的基元。请考虑以下事项:
public float distance = 3.123456789123456;
这个赋值的右手首先被解释,没有"f"的内涵,它被认为是一个双倍。此处会发生编译器错误。由于浮点数不太精确(保持 7 位小数,而双精度为 15(,您将失去准确性,变量"距离"现在将在 3.123457 左右
在
第三个示例中,对f
后缀的需求变得很明显:
public float distance = 0.3f;
如果删除f
,0.3
将被解释为double
并生成编译错误,因为double
不能隐式向下转换并分配给float
变量。 在这种情况下,您需要指定0.3
是浮点文本。
如果你
写float dist = 3;
它可以没有f
.但是在你分配object dist = 3f;
时,你需要f
,否则它将被定义为整数。