如何将字符串转换为十进制?
我有这个接受数字,逗号和句号的文本框。
假设此文本框包含输入14,500.00
我尝试使用Convert.ToDecimal(textbox.text)
将此数字转换为十进制,但它不起作用。 Convert.ToDecimal()
到包含格式为XXXX.DD
输入的文本框将转换为十进制但输入格式为X,XXX.DD
或任何带有千位分隔符的输入会导致错误:
Input string was not in correct format
在这种情况下, Convert.ToDecimal()
合适?
附加信息:
这是表格。 如果单击“添加”,则“价格”和“数量”的乘积应在数据网格视图中显示为“金额”。
“添加”按钮中的语法包括:
DataRow dr; dr = dsDetail.Tables["SalesOrderDetails"].NewRow(); dr["Amount"] = Convert.ToDecimal(txtSellingPrice.Text) * Convert.ToDecimal(txtQuantity.Text);
SalesOrderDetails
表中的Amount
字段的数据类型为decimal(18,2)
您可以强制文化并使用decimal.Parse
decimal d = decimal.Parse("14,500.00", CultureInfo.InvariantCulture); // 14500
在这种情况下,Convert.ToDecimal()是否合适?
是的,如果需要,您还可以继续使用Convert.ToDecimal
:
d = Convert.ToDecimal("14,500.00", CultureInfo.InvariantCulture);
我会给decimal.TryParse一个去
decimal d; if(decimal.TryParse(textbox.Text, out d)) { //do something }
我怀疑你正在使用一种定义的文化.
作为千位分隔符,
作为小数分隔符。 如果你想强迫,
和.
作为千位和小数分隔符,分别使用:
decimal value = Convert.ToDecimal(textbox.text,CultureInfo.InvariantCulture);
在这种情况下,Convert.ToDecimal()是否合适?
这很好 – 主要的区别是它支持的更多类型比decimal.Parse
,它只支持string
s。
我同意@matt_lethargic,但提供更完整的解决方案。 用XUnit测试:)
[Theory] [InlineData("en-US","44.00")] [InlineData("es-PE", "44,00")] [InlineData("es-PE", "44.00")] [InlineData("es-PE", "0.01E-15")] [InlineData("es-PE", "0,01E-15")] public void ParsesDeciaml(string culture, string dec) { CultureInfo.CurrentCulture = CultureInfo.GetCultureInfo(culture); decimal d; if (!decimal.TryParse(dec, out d) && !decimal.TryParse( dec, System.Globalization.NumberStyles.Any, System.Globalization.CultureInfo.CurrentCulture, out d ) && !decimal.TryParse( dec, System.Globalization.NumberStyles.Any, System.Globalization.CultureInfo.InvariantCulture, out d ) ) Assert.False(true, dec); }
这样,您就可以使用指数格式捕获值。