c# float.Parse / float.TryParse 的一个坑

原创
2022/02/21 17:26
阅读数 2.2K

现象

c# 在 parse 字符串数字时,会根据当前语言环境决定最终结果。Unity 应用也是如此。

例如下面这个例子,在德语环境下,最终的结果放大了 1000 倍。

类似的还有西班牙语,在这些语言中,小数点并不是中文或者英语里的小数点,而是当作分隔符使用。

using System;
using System.Threading;
using System.Globalization;

namespace bible
{
    class Program
    {
        static void Main(string[] args)
        {
            // 假设当前语言环境为 de-DE
            Console.WriteLine(float.Parse("0.123")); // 123
        }
    }
}

解决方法

将当前语言环境设置为 CultureInfo.InvariantCulture。

using System;
using System.Threading;
using System.Globalization;

namespace bible
{
    class Program
    {
        static void Main(string[] args)
        {
            Thread.CurrentThread.CurrentCulture = CultureInfo.InvariantCulture;
            Thread.CurrentThread.CurrentUICulture = CultureInfo.InvariantCulture;
            Console.WriteLine(float.Parse("0.123"));
        }
    }
}

或者在调用 float.Parse 时设置好语言环境。

using System;
using System.Threading;
using System.Globalization;

namespace bible
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine(float.Parse("0.123", CultureInfo.InvariantCulture));
        }
    }
}
展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部