使用C#从字符串转换为浮点数时,浮点数不接受后缀f。我想将字符串转换为float,并且我的字符串中已经包含“ F”后缀。但是从字符串转换为float时,float不接受后缀f并引发异常。
static void Main()
{
string any_str = "123.45F";
float f = float.Parse(any_str);
Console.WriteLine(f);
Console.ReadLine();
}
答案 0 :(得分:4)
基本上float.Parse
使用后缀f不能执行任何操作。 float.Parse
将只接受代表数字值的字符串,任何多余的非数字字符都将引发异常。 f后缀仅供您在代码本身中使用。因此,正如fahime和Norse所说的那样,您需要在使用float.Parse
之前摆脱掉那个'f'。
答案 1 :(得分:1)
我认为float.Parse
并没有任何内置功能,但是您可以为自己的方便创建扩展方法。
public static float ToFloat(this string value)
{
return float.Parse(value.TrimEnd('f', 'F'));
}
使用方式
any_str.ToFloat();
编辑:有人可能建议您使用Regex
清除所有字母或符号,但是效果不佳;仅当您知道末尾会有f
或F
以外的符号时,才使用它。
答案 2 :(得分:1)
为什么在转换后我们不需要后缀,但是在声明期间我们 需要吗?
默认情况下,根据C#规范,每个数字都有一个floating point
将被视为Double
变量,因此您需要使用F
后缀来为此类型创建文字。
// 3.14 is considered a double variable by the compiler so it gives you an error
float myFloat = 3.14;
您可能会问为什么不能分配值为3.14
的双精度变量或将其强制转换为浮点变量?
http://net-informations.com/q/faq/float.html
Decimal,Double和Float变量类型在方式上有所不同 他们存储值。精度是主要区别 float是单精度(32位)浮点数据类型,双精度 是双精度(64位)浮点数据类型,十进制是 一个128位浮点数据类型。
浮点数-32位(7位数字)双精度位-64位(15-16位) 主要区别是Floats和Doubles是二进制浮点 类型和小数点会将值存储为浮点小数点 类型。因此,小数位数具有更高的精度,通常用于 在高度要求的货币(金融)应用程序中 准确性。但是在性能方面,小数要慢于两倍和 浮动类型。
You can read this answer as well.
关于Parse
方法:
float.Parse
仅需要一个有效的字符串,这意味着仅包含[0-9
,符号字符和小数点的字符串(因区域性而异,例如[,/.
])。
因此,您只需要删除字符串中所有无效的字符,然后对其进行解析即可。
答案 3 :(得分:-1)
您需要删除输入中的所有字母字符:
public static void Main()
{
string any_str = "123.45F";
string numberOnly = Regex.Replace(any_str, "[^0-9.]", "");
float f = float.Parse(numberOnly);
Console.WriteLine(f);
Console.ReadLine();
}