我有点卡住:我正在尝试执行if语句,比较最初有.ToString("C");
和小数。我已经尝试将标签转换为十进制,因为我要将它与十进制进行比较,但它会一直触发异常:
输入字符串的格式不正确。
这是我目前的代码:
if(Convert.ToDecimal(SomeLabel.Text) > 1000.00m) { //DO SOMETHING }
//SomeLabel.Text has a value of $1000.00
答案 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)
{
}