【问题标题】:When changing C# web application to spanish, calculation is not working将 C# Web 应用程序更改为西班牙语时,计算不起作用
【发布时间】:2023-03-04 05:52:01
【问题描述】:

我正在开发一个 Web 应用程序,我必须更改我的应用程序以支持西班牙语(它是英语)。现在计算不正确。

为了显示计算中的问题,我制作了另一个 Web 应用程序并将其当前文化设置为“es-ES”。我有一个文本框,其文本已硬编码为 40.00,如下所示:

<asp:TextBox ID="txtNumber" Text="40.00" runat="server"  ></asp:TextBox>

我在尝试转换时遇到问题:

Convert.ToDecimal(txtNumber.Text);    //4000
decimal.Parse(txtNumber.Text, CultureInfo.InvariantCulture);   //40,00

这不是我所期望的。 decimal.parse 是正确的,但我想要 (.) 而不是 (,)。为大型应用程序更改每个控件是很痛苦的,也是因为我使用过

<ajaxtoolkit:filteredtextboxextender id="FilteredTextBoxExtender1" runat="server" targetcontrolid="txtNumber" filtertype="Custom, Numbers" validchars="." />

很多地方。如您所见,它只允许 (.) 而不允许 (,),因此用户将无法输入十进制数字。是否可以在英语文化中进行所有计算并在西班牙语中显示应用程序?

【问题讨论】:

  • 这是预期的行为。 InvariantCulture 有一个点作为小数分隔符。西班牙语有逗号作为小数分隔符。默认情况下,解析将使用当前的文化而不是不变的文化。
  • 40.000 和 40,000 是明显不同的数字,在不同的国家有不同的含义。如果您不同意这一点,您最好只在国家/地区使用一种语言的网站。 "en-US" 是最接近 InvariantCulture 的一种,因此坚持使用 "en-US" 似乎是您的情况的不错选择。

标签: c# globalization


【解决方案1】:

您可以尝试更改当前线程的小数分隔符。

Thread.CurrentThread.CurrentCulture.NumberFormat.NumberDecimalSeparator = ".";
Thread.CurrentThread.CurrentUICulture.NumberFormat.NumberDecimalSeparator = ".";

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-10-03
    • 2020-12-28
    • 2020-06-21
    • 2015-03-25
    • 2014-02-18
    • 2013-07-22
    • 1970-01-01
    • 2020-03-09
    相关资源
    最近更新 更多