我们为什么要在C#中使用文字?

时间:2009-04-09 04:16:46

标签: c#

在一些C#代码中,我看过这样的帖子:

float someFloat = 57f;

我想知道为什么我们应该在上面的例子中使用像f这样的文字?

7 个答案:

答案 0 :(得分:12)

主要是因为编译器确切地知道我们的意思 - 特别是对于重载决策:

Foo(57f);

是否应致电Foo(int) / Foo(float) / Foo(decimal)

实际上,我不喜欢记住事物 - 另一种选择是:

float someFloat = (float)57;

这是运行时强制转换 - 它与57f相同(在IL级别)。唯一不同的是decimal s具有额外的精度:

decimal someDecimal = (decimal)57.0; // same as 57M, not 57.0M (scale is different)

答案 1 :(得分:11)

上面的“f”是类型后缀。这告诉编译器提供的文字的确切类型。这是使用的,因此编译器可以为文字分配适当的存储量(精度)。默认情况下,浮点文字的存储空间为“double”。如果添加“f”作为后缀,则文字只会获得浮点数的存储空间,而精度较低。

double d = 50.1234; // given double storage
double d = 50.1234f; // given float storage, which might lose precision compared to double

答案 2 :(得分:3)

默认情况下,赋值运算符右侧的实数数字文字被视为double。因此,要初始化float变量,请使用后缀f或F,例如:

float x = 3.5F;

如果您不在前一个声明中使用后缀,则会出现编译错误,因为您试图将double值存储到float变量中。

来自MSDN: float

答案 3 :(得分:1)

查看这篇文章,它解释了很多关于C#中的数字文字:http://www.blackwasp.co.uk/CSharpNumericLiterals.aspx

以下是文章的一些摘录:

  

float unitPrice = 123.45; // 这个   不会编译

     

这里的问题是你不能   总是隐式转换一个double   (123.45)成一个浮子。 C#编译器   了解这一点并停止代码   从编译

答案 4 :(得分:1)

  

为什么我们应该使用文字?

int / int = int ,但 int / float = float

int timespanInMS = 500;

Console.WriteLine("Execution time: {0} sec.", timespanInMS / 1000);
Console.WriteLine("Execution time: {0} sec.", timespanInMS / 1000F);

// Result:
// Execution time: 0 sec.
// Execution time: 0.5 sec.

答案 5 :(得分:0)

  

我想知道为什么要使用   在上述情况下像f这样的文字?。

你不应该。好吧,你没有拥有

以上情况显示浮点初始化为57f。整数被隐式转换为浮点数编译时间,因此如果困扰你,你可以轻松地去掉那个f后缀。但是,为了保证书面代码的一致性,我总是尝试添加后缀。请注意,这仅适用于舍入数字(整数)。

ImplicitExplicit号码对话中查看Msdn。

答案 6 :(得分:-1)

因为57是整数,57.0是双精度。你试图得到一个浮点数,这是一个单精度数。这就引出了一个问题,为什么你要使用一个精确的浮子?

有关C#文字的更多信息,请参阅http://www.blackwasp.co.uk/CSharpNumericLiterals.aspx

相关问题