I have a variable that when it is smaller that zero it formats the number to -5,650 allowing AllowThousands using comma as separator
however when I try to check the value it throws me an exception... what can I do?
if (int.Parse("-5,650", NumberStyles.AllowLeadingSign) < 0)
The exception string is the next:
System.FormatException: Input string was not in a correct format. at System.Number.StringToNumber(String str, NumberStyles options, NumberBuffer& number, NumberFormatInfo info, Boolean parseDecimal) at System.Number.ParseInt32(String s, NumberStyles style, NumberFormatInfo info) at System.Int32.Parse(String s, NumberStyles style) at Sistema_Caja_Temp_wpf.Vistas.RegistraVentas.btnPagarClick(Object sender, RoutedEventArgs e) in C:\Users\estem\OneDrive\Documents\PROYECTOS\Sistema Caja Temp wpf\Vistas\RegistraVentas.xaml.cs:line 210
CodePudding user response:
Besides going with the "nuclear" option of NumberStyles.Any
, you can combine NumberStyles
entries. Good news is that you already know which ones to use.
int.Parse("-5,650", NumberStyles.AllowThousands | NumberStyles.AllowLeadingSign);
// gives "-5650" as an Int32
CodePudding user response:
Change your number style to NumberStyles.Any and the code you posted succeeds.
CodePudding user response:
Integer is only for numbers without a decimal place. If you want to accept numbers with decimal places like in your example you should change your code to float
, double
or decimal
so if you change your Code to
if (float.Parse("-5,650") < 0)
it should work.
if you want to test if your input has the correct format you can use TryParse instead.
like this
int input;
if (int.TryParse("-5,650", out input) && input < 0)