2017-06-01 8 views
0

我正在研究一个Web应用程序,并且必须更改我的应用程序以支持西班牙语(它是英语)。现在计算不正确。将C#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="." />

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

+1

这是预期的行为。 'InvariantCulture'有一个小数点作为小数点分隔符。西班牙语有一个逗号作为小数点分隔符。默认情况下,解析将使用当前的文化,而不是不变的文化。 – Adwaenyth

+0

40.000和40,000是不同的数字,在不同的国家有不同的含义。如果您不同意这一点,那么您最好只在一个国家使用一种语言的网站。 “en-US”是最接近InvariantCulture的一个,因此坚持“en-US”似乎是您的理想选择。 –

回答

0

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

Thread.CurrentThread.CurrentCulture.NumberFormat.NumberDecimalSeparator = "."; 
Thread.CurrentThread.CurrentUICulture.NumberFormat.NumberDecimalSeparator = "."; 
相关问题