如何在第二台计算机 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
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但这可能会给您在其他地方带来问题,所以我不推荐这个。
正如我在问题中所述,我最近编写了一个小程序来计算建造一个房间所需的砖块数量,使用以下方法
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
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但这可能会给您在其他地方带来问题,所以我不推荐这个。