避免落入c#float.Parse / float.TryParse的陷阱
最编程
2024-08-11 21:24:49
...
现象
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));
}
}
}
上一篇: 使用C语言实现MySQL的连接
下一篇: 《C语言学习的第19天》
推荐阅读
-
避免落入c#float.Parse / float.TryParse的陷阱
-
搞定 MSMQ!消息的发送、接收和避免陷阱——在本地创建队列
-
玩转MySQL 5.7临时表空间,避免掉入陷阱的详细指南
-
避免在搭建鲁班H5本地项目中踩到的陷阱
-
深入理解常见固态硬盘术语,避免落入购买陷阱
-
提高开发效率的黄金法则:如何避免观念、沟通和异常成本的陷阱
-
万字指南:避免 C++ 的陷阱并思考这些陷阱(下)
-
避免在元素-用户界面中使用 el-table 树状道具的陷阱
-
持续部署的7个陷阱及其避免方法-什么是持续部署?
-
MyBatis 缓存避免陷阱:分布式环境中的MyBatis一级缓存、二级缓存实施分析和数据一致性问题