c# - .NET 4.x 与 .NET 3.5 相比更改了小数点 - 如何解决?(统一)
问题描述
所以我开始自下而上地重新制作我的 Unity 项目,将“脚本运行时版本”设置更改为“.NET 4.x 等效”。然后我注意到我的“float.Parse”从字符串中删除了小数点(点)(反之亦然)。
例子:
string s1 = "10.2";
string s2 = "20,2";
Debug.Log("TEST PARSE 1: "+float.Parse(s1));
Debug.Log("TEST PARSE 2: "+float.Parse(s2));
.NET 3.5 返回:
“测试解析 1:10.2”
“测试分析 2:202”
.NET 4.x 返回:
“测试解析 1:102”
“测试分析 2:20,2”
现在,这对我来说是一个相当大的问题,因为 .NET 版本是唯一改变的东西(我可以有两个正在运行的项目同时给出不同的结果) - 所以它不依赖于我的其他计算机或 Unity 设置(除非更改此版本会在 Unity 的其他地方进行一些偷偷摸摸的更改而不通知我)。鉴于此,我如何重现 .NET 4.x 中的第一个变体?
编辑
这是一个解决方案(发布的是正确的,但这将专门针对 Unity 解决):在某些脚本中,只需传递以下内容:
using UnityEngine;
using UnityEditor;
using System.Threading;
[InitializeOnLoad]
public class Startup {
static Startup() {
Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("en-us");
}
}
来源:https ://forum.unity.com/threads/editor-is-using-windows-locale-settings.442847/
解决方案
您看到的行为可能是因为在某些文化集中,,
使用的是小数而不是.
小数。
例如,如果您当前的文化设置是,en-US
并且您执行以下语句:
float.Parse("20,2", System.Globalization.NumberStyles.Float)
你会抛出一个 FormatException。如果你交换你会Float
得到Any
你想要的结果202
:
float.Parse("20,20", System.Globalization.NumberStyles.Any) //2020
ed:.NET 的早期版本比 .NET 4.x 做出了更慷慨的意图假设,这就是您看到观察到的行为的原因。
ed 2:更具体地说,.NET 3.5 默认单参数重载float.Parse
to NumberStyles.AllowThousands
(或类似的组合)。这可以允许开发人员引入由文化设置和解析可能不明确的字符串导致的细微缺陷,如下所示:
10,000 <--- is it 10 thousand, 10 point 000, etc?
推荐阅读
- python-3.x - 如何从字符串列表中删除拆分为字符的单词
- python - 如何在特定文本后熊猫读取日志文件
- json - 如何将子项合并到父项
- python - 当伸出屏幕时,Tkinter OptionMenu 关闭
- javascript - 模块构建失败:BrowserslistError:未知浏览器查询“死”
- javascript - 身份验证错误捕获中缺少firebase凭据
- php - 无法在 Magento 2 中安装产品推荐模块
- apex - 后台注销 Salesforce 社区用户
- c# - 我可以使用字节而不是 int 或短裤来节省处理吗?
- angular - Angular .subscribe 不更新