我是这样计算的:
void TESTINGtesting()
{
string aa = "33,9";
//float a1 = float.Parse(aa, CultureInfo.InvariantCulture.NumberFormat);
txt_Slask.text = "(" + aa.ToString() + ") - ";
float a1 = float.Parse(aa.Replace(',', '.'));
print("a1: " + a1);
txt_Slask.text += "++>(";
txt_Slask.text += a1.ToString();
txt_Slask.text += ")";
txt_Slask.text += "<++";
}我在编辑器中得到以下结果:

当我上传到我的iPhone时,结果如下:

我要做的是:
G 212中的UI文本中没有任何内容。
我试过用"InvariantCulture“,但结果是一样的。
顺便说一下,我的iPhone是瑞典地区。
我感到困惑,一直未能找到解决办法。
发布于 2020-09-02 22:35:52
你似乎在文化中跳舞,你期望从错误的文化中得到什么。
让我们从注释掉的代码开始,我假设这是之前的一次尝试(可以预见)失败了:
string aa = "33,9";
float a1 = float.Parse(aa, CultureInfo.InvariantCulture.NumberFormat);.Net中不变的区域性是en-us,该区域性中的数字将表示为33.9,而不是33,9。所以你的转换失败了。
然后向编译器抛出一些东西,直到最终得到所需的结果:
float.Parse(aa.Replace(',', '.'))但是,如果您启用了C#静态分析包,您将在该行上得到警告,表示您需要将区域性传递给函数,因为字符串在不同的区域性中被不同地转换为数字。
具体来说,你提到你的手机是在瑞典文化下,它期望一个逗号作为小数分隔符,你正在用上面的行来替换它。
接下来发生的事情取决于您的框架。我假设会生成一个异常并忽略它,但是您的堆栈已经解除,所以您的函数的其余部分不再运行。
长话短说,对于代码中数字的字符串表示,坚持特定的区域性(不变量很好),每当您对这些字符串进行转换时,使用正确的区域性。
string aa = "33.9";
float a1 = float.Parse(aa, CultureInfo.InvariantCulture);发布于 2020-09-03 09:41:28
看来我终于解决了这个问题,所以谢谢你的帮助。
void TESTINGtesting()
{
Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo("en-US");
Thread.CurrentThread.CurrentCulture = CultureInfo.GetCultureInfo("en-US");
string aa = "33,9";
txt_Slask.text = "B(" + aa.ToString() + ") - ";
aa = aa.Replace(',', '.');
float a1 = float.Parse(aa);
txt_Slask.text += "++>(";
txt_Slask.text += a1.ToString();
txt_Slask.text += ")";
txt_Slask.text += "<++";
}https://stackoverflow.com/questions/63713410
复制相似问题