如何将字符串转换为十进制

本文关键字:十进制 转换 字符串 | 更新日期: 2023-09-27 18:00:05

我无法将字符串转换为十进制,这是lblTotal="110,00€"的值我想把它转换成十进制,我该怎么转换?

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

如何将字符串转换为十进制

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

首先,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
}

您应该通知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)
{
   .....
}

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

语言文化名称、代码和ISO值方法表。

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

简单

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

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

或者,您可以通过在提供的链接中搜索来使用其他区域性。