【问题标题】:How to fix a different decimal setting on a second computer C#如何在第二台计算机上修复不同的十进制设置 C#
【发布时间】:2021-09-09 14:13:07
【问题描述】:

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

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

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

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

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

现在通过更改第二台计算机上的十进制符号来修复错误

我想知道我的代码是否有办法检查是否是这种情况并尝试修复它 不用我去每台电脑手动设置

【问题讨论】:

  • “现在通过更改第二台计算机上的十进制符号来修复错误” - 嗯?我觉得我们必须在这里遗漏一些信息。
  • 好的,主计算机上的十进制符号是一个点,而在第二个计算机上它是一个逗号,如果你愿意的话,可以通过将符号更改为在它工作的两台机器上匹配。我可以像 60 行代码一样链接 github 页面
  • 不,我明白这一点。如果您接受用户输入,我只能看到这是一个问题。但我们在您的问题中看不到任何证据,也没有任何将用户输入解释为数值的代码。
  • 好的,那么你如何解释(解析)这些数字呢?为什么你要强制执行一种不同的解析数字的方式?概括:在德国计算机上,小数点分隔符是逗号,德国人会觉得以这种方式输入十进制值非常自在。在英式英语计算机上,小数分隔符是句号,英式英语用户以这种方式输入小数时会感到非常自在。
  • 看来你应该使用float.TryParse(value, NumberStyles.Any, CultureInfo.InvariantCulture, out fValue);

标签: c# settings


【解决方案1】:

通常,当您启动 .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 但这可能会在其他地方给您带来问题,所以我不推荐这样做。

【讨论】:

    猜你喜欢
    • 2021-03-05
    • 1970-01-01
    • 2019-09-19
    • 1970-01-01
    • 2012-11-05
    • 1970-01-01
    • 1970-01-01
    • 2018-08-08
    • 2015-02-14
    相关资源
    最近更新 更多