在初始化`float`时,转换为`float`和添加`f`作为后缀有什么区别?

时间:2015-10-16 06:21:38

标签: c casting floating-point

之间有什么区别
ng-disabled

private async void Button_Click(object sender, RoutedEventArgs e)
{
    var t = new TextBlock();
    t.Text = "TEXT1";

    var t2 = new TextBlock();
    t2.Text = "TEXT2";

    dummyStack.Children.Add(t);

    await Task.Delay(100);

    // This can be any synchronous work 
    Thread.Sleep(5000);

    dummyStack.Children.Add(t2);
}

他们都编译并成功运行。

6 个答案:

答案 0 :(得分:85)

float

这是float字面值,这意味着直接为float f = (float) 99.32 ; 值赋值的浮点变量。

float

这是一个double变量,分配了float值,在分配之前会转换为float f = (float) 99.32;

答案 1 :(得分:25)

差异可能会被优化掉,但在第一种情况下,你有一个双文字类型,当你在第二种情况下有一个浮点文字时,它是一个浮动文字类型。

如果没有优化,您将在第二个示例中的代码中获得类型转换。

然而,有一些极端情况,结果可能(取决于舍入模式)略有不同。如果您的数字无法准确表示,您将在第一种情况下四舍五入 - 首先将十进制表示舍入为double,然后将该四舍五入为浮点数,而在第一种情况下直接舍入十进制表示到了漂浮物。

答案 2 :(得分:11)

在第一种情况下,没有强制转换99.32被解释为double而不是float。

双文字被渲染为浮动。

在第二种情况下,您有一个后缀f,以确保编译器将99.32视为float。

答案 3 :(得分:11)

99.32行中,默认情况下,文字double被创建为float类型,然后投放到float f = 99.32f ;

在第float行中,由于f中的99.32f结尾,因此文字被创建为double f = 99.32;类型,并且不需要任何类型转换。

后者类似于撰写double,因为您将example类型直接分配给匹配类型的变量。

答案 4 :(得分:10)

没有后缀的浮点文字默认为double类型。

因此,说明float f = (float) 99.32;您首先将{strong>显式文字99.32 double类型float投射到f,然后将其分配给变量float f = 99.32;

陈述f做同样的事情,但在这种情况下,类型之间的转换是隐式完成的。

如果你想避免隐式转换,你应该使用float f = 99.32f;后缀来定义你的文字(即Stephen Harper

答案 5 :(得分:7)

区别在于文字99.32的类型为double,而文字99.32f的类型为float。

第一个语句将float文本赋给float变量。没什么特别的。

第二个语句将double文字强制转换为float,并将结果赋给float变量。

就标准而言,您可以将double文本分配给float变量,而无需自己显式地转换它。在那种情况下,发生隐式转换。例如。 :

float f = 99.32;

你甚至可以这样做:

float f = (double) 10.5f;

并且右侧仍然隐式转换为浮动。

请注意,大多数现代编译器都会优化它们,因此表示浮动通常是风格和偏好的问题。 保持一致。