无法使用转换后的标签文本执行操作

时间:2015-07-20 14:18:04

标签: c# winforms

我有点卡住:我正在尝试执行if语句,比较最初有.ToString("C");

创建的货币字符串的label.text

和小数。我已经尝试将标签转换为十进制,因为我要将它与十进制进行比较,但它会一直触发异常:

  

输入字符串的格式不正确。

这是我目前的代码:

if(Convert.ToDecimal(SomeLabel.Text) > 1000.00m) { //DO SOMETHING } 
//SomeLabel.Text has a value of $1000.00

5 个答案:

答案 0 :(得分:1)

  

// SomeLabel.Text的值为$ 1000.00

美元符号是问题的原因。 Yoa可能使用不同的货币符号。您可以使用decimal.Parse / decimal.TryParse(处理无效输入)强制执行此操作:

string input = "$1000.00";
decimal decimalValue;
if(decimal.TryParse(input, out decimalValue))
{
    // using current CurrencySymbol, same as Convert.ToDecimal
    Console.WriteLine("Converted successfully: " + decimalValue);
}
else
{
    var usCulture = new CultureInfo("en-US");
    if (decimal.TryParse(input, NumberStyles.Currency, usCulture, out decimalValue))
    {
        // using dollar sign as CurrencySymbol
        Console.WriteLine("Converted successfully with CultureInfo(en-US): " + decimalValue);
    }
    else
    {
        Console.WriteLine("Could not be parsed to decimal");
    }
}

输出:

Converted successfully with CultureInfo(en-US): 1000.00

值得注意的是,NumberFormatInfo.InvariantInfo.CurrencySymbol并未返回美元符号(我认为),而是¤

答案 1 :(得分:1)

Convert.ToDecimal明确使用decimal.Parse此方法默认使用NumberStyles.Number

这是一种复合风格,如果AllowDecimalPoint CurrencySymbol为{AllowCurrencySymbol,则包括CurrentCulture但不包括$风格甚至 {1}}和NumberDecimalSeparator.

您可以使用decimal.parse(String, NumberStyles, IFormatProvider) overlaod作为参数,例如;

string s = "$1000.00";
var d = decimal.Parse(s, NumberStyles.AllowCurrencySymbol | NumberStyles.AllowDecimalPoint, 
                      CultureInfo.GetCultureInfo("en-US"));
解析后,

d将为1000

答案 2 :(得分:0)

根据你的例子。您的字符串值 $ 1000.00

这包含 $ 符号,这就是编译器无法将字符串转换为十进制的原因。

尝试通过替换删除不可用的字符。或者尝试以下方法

Regex digitsOnly = new Regex(@"[0-9.]");  // this regex matches only digits and decimal 
string decimalnumberstring = digitsOnly.Replace(SomeLabel.Text, "");// replace all non numbers (except decimal) with empty string

然后尝试转换字符串值,如下所示。

if(Convert.ToDecimal(decimalnumberstring) > 1000.00m) { //DO SOMETHING }
希望它有所帮助......

答案 3 :(得分:0)

首先从你的文字中取出美元标志:

资料来源:$ 1000

double result = 0M;
String value = SomeLabel.Text.Substring(1);
if (Double.TryParse(value, out result)) {
    //
}
return result;

答案 4 :(得分:-2)

试试这个

if(decimal.Parse(SomeLabel.Text) > 1000.00m)
{

}