unity C# float.Parse 在不同区域小数表示是不一样的

float.Parse 在不同语言下,小数点表示是不一样的,需要处理不同语言的问题。俄语,法语,德文、印尼文、越南文、葡萄牙语等都是不用.表示小数点 ;进一步研究发现,U3D新版本(2020之后版本)中使用了C#的新特性,自适应每种语言的浮点数标准化。
num = float.Parse(vl);
遇到一个多语言问题同步一下。就是有些语言小数点分隔符并不是".", 如果我们直接用float.parse强转我们类似“0.1”这种字符串,会报"input string was not in a correct format"(输入字符串的格式不正确)错误。
举个例子:

0.5.ToString();

这个很基础的字符串转化函数,在英语和中文环境下出来的结果是:0.5
但是!俄语、法语、德语中出现的结果是:0,5。很明显可以看出'.'变成了','

解决方案一:

public static float StringConvertFloat(string str)
    {
        float num = 0;
        if (string.IsNullOrEmpty(str))
            return num;
        string[] strNums = str.Split('.');
        if (strNums.Length <= 0)
            return num;
        if(strNums.Length < 2)
        {
            num = float.Parse(strNums[0]);
        }
        else
        {
            num = float.Parse(strNums[0]) + float.Parse(strNums[1]) / Mathf.Pow(10, strNums[1].Length);
        }
        return num;
    }

解决方案二:
因此我们的解决办法是在启动函数里加上这么一句话,让游戏主线程强制转化为英语环境:

System.Globalization.CultureInfo.DefaultThreadCurrentCulture = new System.Globalization.CultureInfo("en-US");
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容