【问题标题】:How to determine the decimal separator in ASP MVC如何确定 ASP MVC 中的小数点分隔符
【发布时间】:2023-04-01 11:50:01
【问题描述】:

我有一个显示数字的 ASP.net MVC 网站。我能否以某种方式确定用户的计算机是否配置为使用逗号或点作为小数分隔符?

我可以在 Request.UserLanguages 中检查不同的语言,但这对于确定小数点分隔符不是很准确。

【问题讨论】:

    标签: c# asp.net-mvc localization


    【解决方案1】:

    您可以查看here 如何从浏览器语言中获取CultureInfo - 这将为您提供 CultureInfo 对象,您可以像这样使用:

    var sep = browserCulture.NumberFormat.NumberDecimalSeparator;
    

    参见CultureInfoNumberFormatInfo

    【讨论】:

    • 谢谢 - 这与我需要的非常接近,尽管它并非在所有情况下都有效,因为小数点分隔符不一定必须与语言相对应。
    【解决方案2】:

    MVC 在处理十进制值时出现问题。

    Haack 写了一个很棒的post 来讨论这个问题。它向您展示了如何克服这一点。

    【讨论】:

      【解决方案3】:

      由于您询问的是最终用户的计算机,因此答案是否定的。不幸的是,网络浏览器不会为您提供此类信息。您可以获得的只是用户的首选语言,但它是通过 HTTP Accept-Language 标头发送到服务器的浏览器设置。就是这样。
      如果你认为 JavaScript 是否会给你这个,答案是否定的。它在沙盒中运行,因此无法访问操作系统。
      我不确定 Flash 是否可以访问此类信息(可能),但最终用户可能会阻止它。 ActiveX 控件也是如此,而且它不是跨平台的。

      所以坚持从网络浏览器检测到的文化并相应地格式化数字,这样会更容易(尽管它不支持最终用户修改操作系统设置)。

      【讨论】:

      • 谢谢。我认为您的答案将是“最正确的答案”。但由于 Oded 的回答与我需要的非常接近,我将接受他的回答。
      • 另一个快速评论:可以通过一个技巧检测 JavaScript 中的小数点分隔符:使用 toLocaleString() (或类似方法)将十进制数转换为字符串,然后简单地看看使用了什么作为小数分隔符。
      • @Preli:这是个好主意,但结果并不一致——不同的网络浏览器以不同的方式处理它(其中一些只是坏了)。
      • 是的,你写的是它不会在所有情况下都有效。但我想这是 Web 开发人员必须习惯的。许多问题只有一个解决方案,它并不适用于所有情况(每个浏览器、操作系统、配置……)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-11-15
      • 1970-01-01
      • 1970-01-01
      • 2023-03-22
      • 1970-01-01
      • 2021-12-25
      • 1970-01-01
      相关资源
      最近更新 更多