无法对转换后的标签文本执行操作
本文关键字:标签 文本 执行 操作 转换 | 更新日期: 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
样式甚至如果你的CurrentCulture
的CurrencySymbol
是$
和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)
{
}