C# 如何将字符串转换为十进制?
我有一个接受数字、逗号和句点的文本框 假设此文本框包含输入C# 如何将字符串转换为十进制?,c#,C#,我有一个接受数字、逗号和句点的文本框 假设此文本框包含输入14500.00 我试图用convert.ToDecimal(textbox.text)将这个数字转换成十进制,但它不起作用Convert.ToDecimal()到包含格式为XXXX.DD的输入的文本框将转换为十进制,但使用格式为X,XXX.DD的输入或任何带有1000个分隔符的输入将导致错误: 输入字符串的格式不正确 Convert.ToDecimal()在这种情况下合适吗 其他信息: 这是表格。如果单击“添加”,则“价格”和“数量”
14500.00
我试图用convert.ToDecimal(textbox.text)
将这个数字转换成十进制,但它不起作用Convert.ToDecimal()
到包含格式为XXXX.DD
的输入的文本框将转换为十进制,但使用格式为X,XXX.DD
的输入或任何带有1000个分隔符的输入将导致错误:
输入字符串的格式不正确
Convert.ToDecimal()
在这种情况下合适吗
其他信息:
这是表格。如果单击“添加”,则“价格”和“数量”的乘积应在datagridview中显示为“金额”
“添加”按钮中的语法包括:
DataRow dr;
dr = dsDetail.Tables["SalesOrderDetails"].NewRow();
dr["Amount"] = Convert.ToDecimal(txtSellingPrice.Text) * Convert.ToDecimal(txtQuantity.Text);
my
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 value = Convert.ToDecimal(textbox.text,CultureInfo.InvariantCulture);
Convert.ToDecimal()在这种情况下合适吗
这很好-主要区别在于它支持的类型比只支持字符串的decimal.TryParse更多。我想试试decimal.TryParse
decimal d;
if(decimal.TryParse(textbox.Text, out d))
{
//do something
}
我同意@matt_lathargic,但提供了一个更完整的解决方案。使用XUnit进行测试:)
通过这种方式,您可以以指数格式捕获值。您的文化是什么?@SonerGönül如何确定文化?您可以使用
CultureInfo.CurrentCulture
属性确定您正在使用的文化。此属性在windows计算机中使用您的区域和语言选项。我对此区域性内容有点缺乏经验,很抱歉问这个问题,但是我在哪里可以找到CultureInfo.CurrentCulture?这是我在项目中的某个地方编写的代码吗?还是我可以在项目的属性窗口中找到它@索尼格尔。。谢谢你的帮助,如果你不想回答这个问题,我会理解的,但如果你愿意,我会非常感激。@LeonardCupat你有没有在调试器中仔细检查过代码,看看在解析时txt值是什么?您是否尝试过使用CultureInfo.InvariantCulture
?它不起作用。我尝试了decimal.Parse和Convert.ToDecimal。我已经按照你的建议做了所有的事情,但仍然会产生同样的错误。问题是否可能来自文本框本身?或者我正在使用的数据库中的某些数据类型不匹配?
[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);
}