You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

C#中float声明需后缀F,为何字符串转float带F会报错?

关于C#中float类型后缀F的两个问题解答

1. 为何声明float变量要加F后缀,转换后却不用?

咱们先搞清楚C#里浮点字面量的默认规则:当你写123.45这种不带后缀的浮点数值时,编译器会默认把它当成double类型的字面量。而float的精度(32位)比double(64位)低,C#不允许把double隐式转换为float——因为这会丢失精度,编译器会直接报错。

F后缀的作用,就是明确告诉编译器:“嘿,这个字面量是float类型的,别把它当成double!”这样编译器就会直接把它当作float来处理,赋值给float变量自然没问题。

而当变量已经是float类型之后,它存储的是具体的浮点数值(二进制形式),后缀只是用来标识字面量类型的语法标记,运行时变量里根本不存在这个后缀,所以自然不需要保留它。

2. 解决float.Parse无法识别F后缀的异常

你遇到的这个问题,是因为float.Parse默认格式设置不允许识别浮点后缀F/f。默认情况下,Parse只认标准的数字格式(比如123.45),不会把末尾的F当作合法部分。

要解决这个问题,你需要给Parse方法传入NumberStyles.Float枚举值(这个枚举允许识别浮点后缀、科学计数法符号等),同时别忘了引用System.Globalization命名空间。修改后的代码如下:

using System;
using System.Globalization;

class Program
{
    static void Main() 
    { 
        string any_str = "123.45F"; 
        float f = float.Parse(any_str, NumberStyles.Float); 
        Console.WriteLine(f); 
        Console.ReadLine(); 
    }
}

这样运行后就能正常解析带F后缀的字符串,不会再触发异常了。

内容的提问来源于stack exchange,提问作者Nitin Rastogi

火山引擎 最新活动