簡體   English   中英

如何將字符串轉換為十進制?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM