我怎样才能将字符串转换为十进制

时间:2015-06-28 15:29:21

标签: c# string decimal

我无法将字符串转换为十进制,这是lblTotal =" 110,00€" 我想将其转换为十进制,我该如何转换它?

decimal number;
if( Decimal.TryParse(((Label)e.Item.FindControl("lblTotal")).Text.ToString(), out number))
{

}

3 个答案:

答案 0 :(得分:3)

如果你不能解析你的字符串,可能会有一些可能性......

首先,Decimal.TryParse使用NumberStyles.Number样式,但不包括Currency样式。两者都是复合风格。这就是为什么你需要使用指定货币符号和小数分隔符的另一个重载。

其次,您的Decimal.TryParse默认使用CurrentCulture设置。这意味着,CurrencySymbol不是和/或您的NumberDecimalSeparator不是,

作为最佳解决方案,您可Clone CurrentCulture Currency并使用var clone = (CultureInfo) CultureInfo.CurrentCulture.Clone(); clone.NumberFormat.CurrencySymbol = "€"; clone.NumberFormat.NumberDecimalSeparator = ","; decimal number; if(decimal.TryParse(((Label)e.Item.FindControl("lblTotal")).Text, NumberStyles.Currency, clone, out number)) { // You can use number here } 样式设置这些属性;

GoogleMap

答案 1 :(得分:2)

您应该告知Decimal.TryParse您有货币符号以及您的文化

string test = "110,00€";
if( Decimal.TryParse(test, NumberStyles.Currency, CultureInfo.CurrentCulture, out number))
{
    Console.WriteLine(number);
}

我还建议您使用更具防御性的方法来检索要解析的标签。

Label lbl = e.Item.FindControl("lblTotal") as Label;
if(lbl != Null)
{
   .....
}

答案 2 :(得分:0)

您可以将CultureInfo.CreateSpecificCulture与使用欧元作为货币的国家/地区的文化代码一起使用。

Table of Language Culture Names, Codes, and ISO Values Method

例如希腊,爱尔兰,意大利使用这种货币。

简单地

decimal resault = decimal.Parse(((Label)e.Item.FindControl("lblTotal")).Text.ToString()
                                ,NumberStyles.Currency
                                ,CultureInfo.CreateSpecificCulture("it-IT"));

这会将您的字符串"110,00€"正确转换为十进制,因为意大利使用欧元()作为货币。

或者您可以通过搜索提供的链接使用其他文化。