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

本文关键字:标签 文本 执行 操作 转换 | 更新日期: 2023-09-27 18:03:40

我有点卡住了:我正试图执行一个比较标签的if语句。最初具有从.ToString("C");

创建的货币字符串的文本

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

输入字符串格式不正确。

下面是我当前的代码:

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

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

//SomeLabel。文本的值为$1000.00

美元符号是问题的原因。你们可能使用了不同的货币符号。您可以强制使用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不返回美元符号(我想的),但¤ .

Convert.ToDecimal显式使用decimal.Parse,此方法默认使用NumberStyles.Number

这是一个复合样式,包括AllowDecimalPoint但不包括AllowCurrencySymbol样式甚至如果你的CurrentCultureCurrencySymbol$NumberDecimalSeparator.

您可以使用decimal.parse(String, NumberStyles, IFormatProvider)重载,将这些作为参数,如;

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

d解析后为1000

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

包含一个$符号,这就是为什么编译器不能将string转换为十进制。

尝试通过replace删除不可用的字符。或者试试下面的方法

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 }

希望能有所帮助....

先去掉文本中的美元符号:

来源:1000美元

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

试试这个

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