gpt4 book ai didi

c# - .NET 4.x 相对于 .NET 3.5 更改了小数点 - 如何修复? (统一)

转载 作者:行者123 更新时间:2023-11-30 22:58:40 24 4
gpt4 key购买 nike

因此,我开始自下而上地重新制作我的 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 返回:

"TEST PARSE 1: 10.2"

"TEST PARSE 2: 202"

.NET 4.x 返回:

"TEST PARSE 1: 102"

"TEST PARSE 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。如果你交换 FloatAny你会得到你想要的结果 202 :

float.Parse("20,20", System.Globalization.NumberStyles.Any) //2020

ed:以前版本的 .NET 比 .NET 4.x 对意图做出了更慷慨的假设,这就是为什么您看到了您观察到的行为。

ed 2:更具体地说,.NET 3.5 默认为 float.Parse 的单参数重载至 NumberStyles.AllowThousands (或类似的组合)。这可能允许开发人员引入由于区域性设置和解析可能不明确的字符串而导致的细微缺陷,如下所示:

10,000 <--- is it 10 thousand, 10 point 000, etc?

关于c# - .NET 4.x 相对于 .NET 3.5 更改了小数点 - 如何修复? (统一),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52896622/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com