如何在第二台计算机 C# 上修复不同的十进制设置

How to fix a different decimal setting on a second computer C#

正如我在问题中所述,我最近编写了一个小程序来计算建造一个房间所需的砖块数量,使用以下方法

 float result = ((fLenght * fWitdh) * fHeight) * bricksPerMeter;

当 运行 在我的主计算机和第二台计算机上测试用例时,他们得出不同的答案

例如:PC 1 ((15 * 1)* 1.8)* 40 = 1080

具有相同值的 PC 2 产生 600 作为答案

现在通过更改第二台计算机上的小数点符号来修复错误

我想知道我的代码是否可以检查是否是这种情况并尝试修复它 无需我去每台计算机并手动设置

通常当您启动 .NET 应用程序时,它会从操作系统中获取默认的区域性设置。也就是说,为德语(德国)配置的计算机将导致在应用程序中使用 de-de 文化,而为英语(英国)配置的计算机将导致使用 en-gb 文化在应用程序中。

这些文化带来了诸如日期格式字符串、小数点分隔符等东西,这就是您的问题所在。

一个简单的解决方案是更改您的代码,目前是:

float.TryParse(value, out fValue) ? fValue : 1f

使用 Invariant Culture:

float.TryParse(value, NumberStyles.Any, CultureInfo.InvariantCulture, out fValue) ? fValue : 1f;

这将使用小数点分隔符为 . 的不变区域性将字符串解析为浮点数。

请注意,当您将结果转换回字符串时,您可能希望强制执行一种区域性。一种方法是将文化传递给 .ToString 方法:

string resultText = result.ToString(CultureInfo.InvariantCulture);
Console.WriteLine(resultText);    

替代解决方案(但不推荐):您可以override the default culture for your entire application但这可能会给您在其他地方带来问题,所以我不推荐这个。