【问题标题】:Inconsistent DecimalSeparator valueDecimalSeparator 值不一致
【发布时间】:2017-09-28 06:45:06
【问题描述】:

当我将toString() 应用于双精度类型的数字时,我得到了以. 作为小数分隔符的字符串。仅在我的一个项目中,我得到, 作为小数点分隔符。

我没有更改 CultureInfo 数据。在我的所有项目中,我的 CurrentCulture 都是 el-GR,这是默认的系统文化。 el-GR 使用 , 作为小数点分隔符,但我已通过 Windows 区域设置将此值更改为 .,这已正确反映到我的所有项目中,但有问题的项目除外。

我能说的唯一区别是它是一个网站,而不是一个普通的 Visual Studio 项目。我不知道这是否会强制 Visual Studio 考虑本地计算机 NumberFormat 异常以及是否/如何更改。

【问题讨论】:

  • 我无法告诉您为什么会在这种特殊情况下发生这种情况,但您始终可以将特定 CultureInfo 作为参数传递给 ToString 和大多数 Parse 方法,以确保您始终使用相同的文化。您还可以检查 CultureInfo.CurrentCultureCultureInfo.CurrentUICulture 是否相同(例如,通过在特殊页面上显示两者)。
  • 我会随机猜测行为不端的项目针对的是旧的 .NET 版本。
  • @ManfredRadlwimmer 我宁愿避免将 CultureInfo 指定为参数。我已经进行了您建议的测试,并且 CurrentCulture 与 CurrentUICulture 不同。但我所有其他项目也是如此。你知道框架默认使用哪两个?
  • @HansPassant 它针对版本 4.5.2
  • 您的程序使用的 CultureInfo(如果您没有在代码中以某种方式明确设置)与 当前用户 的区域设置有关。运行 Web 项目时,当前用户很可能不是您,即登录计算机的用户,而是 IIS 使用的内置用户。查看this question 并以某种方式显示当前用户

标签: c# .net


【解决方案1】:

如果您没有在代码中明确设置,您的程序使用的 CultureInfo 与 当前用户 的区域设置有关。

当运行一个 web 项目时,很可能当前用户不是你,那个在计算机上登录的用户,而是一个 IIS 使用的内置用户。查看this question 并以某种方式显示当前用户,以了解您的问题是否与此相关。

要更改(.Net 和 IIS 托管的)Web 应用程序的区域设置,您可以使用不同的方法:应用程序的 web.config、整个服务器的 web.config、IIS 的设置,甚至调整注册表。

查看this 线程(以及您在左栏中找到的链接线程)了解您可以使用的方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-09-26
    • 1970-01-01
    • 1970-01-01
    • 2018-07-25
    • 1970-01-01
    • 1970-01-01
    • 2013-08-25
    • 1970-01-01
    相关资源
    最近更新 更多