[英]How do I convert string to decimal?
我有一個文本框,可以接受數字,逗號和句點。
假設此文本框包含輸入14,500.00
我試圖使用Convert.ToDecimal(textbox.text)
將此數字轉換為十進制,但它不起作用。 Convert.ToDecimal()
到包含輸入格式為XXXX.DD
文本框轉換為十進制,但輸入格式為X,XXX.DD
或任何帶有千位分隔符的輸入都會導致錯誤:
Input string was not in correct format
在這種情況下, Convert.ToDecimal()
合適?
附加信息:
這是表格。 如果單擊“添加”,則“價格”和“數量”的乘積應在datagridview中顯示為“金額”。
“添加”按鈕中的語法包括:
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);
我會給十進制.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
。
我同意@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);
}
這樣,您可以捕獲指數格式的值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.