将文本转换为整数比较C#

将文本转换为整数比较C#

问题描述:

的C#程序接收标签的字符串:将文本转换为整数比较C#

1.2345 V 

我需要使用<或>这个值在一个“如果”语句进行比较。 如何将上述字符串转换为整数? 我试着使用:

int anInteger; 
anInteger = Convert.ToInt32(textBox1.Text); 
anInteger = int.Parse(textBox1.Text); 

但它引发错误System.FormatException: incorrect format

+1

这是_not_一个整数,但双/十进制值。在解析之前,你还必须提取'V' –

+0

你期望在1.2345 V之外得到什么样的整数值? – Rahul

+0

您只想要数字还是'V'具有特殊含义,因为该字符串不能转换为数字值。 – Jerodev

您必须删除V末和使用decimal.Parse/TryParse

decimal d; 
bool validFormat = decimal.TryParse(textBox1.Text.TrimEnd('V', ' '), out d); 

在我的国家,它使用,为十进制和.作为组分隔符这会产生12345

如果你不是要忽略任何不是字符串中的某个数字:

int number = int.Parse(new string(textBox1.Text.Where(char.IsDigit).ToArray())); 
+2

在C#7中,你可以做'出小数点d',保存一点的空间:) – Jaxi

+0

,你可能不得不使用不变的文化取决于提问者的位置 –

+0

@YairHalberstadt:好吧,它适用于我,我不使用'.'作为小数点分隔符。结果是'12345'这有点奇怪 –

如果你坚持整数1.2345 768,16是忽略和最终的结果是12345):

// Any digits (including, say, Persian ones) are OK 
    int anInteger = (textBox1.Text 
    .Where(c => char.IsDigit(c)) 
    .Aggregate(0, (s, a) => s * 10 + (int)char.GetNumericValue(a)); 

或者

// Only '0'..'9' digits supported 
    int anInteger = (textBox1.Text 
    .Where(c => c >= '0' && c <= '9') 
    .Aggregate(0, (s, a) => s * 10 + a - '0'); 

另请注意,取决于您当前的文化设置,您可以获得不同的结果。

下面的代码与去DE培养,运行设置

System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("de-DE"); 

string str = "1.23"; 
decimal val = decimal.Parse(str); 
val.Dump(); // output 123 

string str2 = "1,23"; 
decimal val2 = decimal.Parse(str2); 
val2.Dump(); // output 1,23 

下面的代码与EN-US区域性已运行设置

System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("en-US"); 

string str = "1.23"; 
decimal val = decimal.Parse(str); 
val.Dump(); // output 1.23 

string str2 = "1,23"; 
decimal val2 = decimal.Parse(str2); 
val2.Dump(); // output 123 

请使用LINQPad来运行代码。

你可以尝试 -

decimal dec=2; 
string str = "3.23456"; 
dec = Convert.ToDecimal(str.ToString()); 
int a = Convert.ToInt32(dec);