Int32.TryParse C# - How to keep the last integer value - c#

I'm trying to convert a string to int with
Int32.TryParse(input, out int number);
and I want to keep the last integer value.
E.g.
If string input = "123" then int number = 123 and if string input = "" or null then int number should stay 123 till input had a new string value.
Have someone a idea?

Keep a copy of the previous value, and if the parse failed copy it back in:
var previousValue = 1;
if(!int.TryParse(input, out var number))
{
number = previousValue;
}

Related

How to assert that currency value displayed as string has been correctly updated

I have string values returned in my automation test before and after the values have been changed (before = "£0 of £650", after = "£0.95 of £650"). The test I have makes a payment to an account and then goes back to check that the values have been modified correctly.
How can I check that the value of the string has been increase 0.95?
I would use a regex pattern to match the values of your string, such as
var match = Regex.Match(input, #"£([0-9\.]+) of £([0-9\.]+)"); // pseudo code
and then do this for before and after, extract the matches, parse to decimal and then compare...
int originalIndex = currentValue.IndexOf(" ");
int newIndex = newValue.IndexOf(" ");
currentValue = currentValue.Substring(0, originalIndex);
newValue = newValue.Substring(0, newIndex);
double origCash = double.Parse(currentValue, NumberStyles.Currency);
double newCash = double.Parse(newValue, NumberStyles.Currency);
Assert.IsTrue(newCash == origCash+valueAdded);

System.FormatException is unhandled by user code

I am sending my poolid in hdnfield when am converting it to show me error . poolid is int32 datatype
if (ddlStaticPoolName.Visible)
{
objUserEntity.POOLNAME = Convert.ToString(ddlStaticPoolName.SelectedItem.Text);
objUserEntity.POOlID = Convert.ToInt32(ddlStaticPoolName.SelectedValue);
}
else if (lblDynamicPoolName.Visible)
{
objUserEntity.POOLNAME = Convert.ToString(lblDynamicPoolName.Text);
objUserEntity.POOlID =Convert.ToInt32(hdnDynamicPoolID.Value);
}
else
{
objUserEntity.POOLNAME = "";
objUserEntity.POOlID = 0;
}
If the string Contains numerical characters But its not Whole Number (ex: double , decimal).
objUserEntity.POOlID = Convert.ToInt32(Convert.ToDouble(ddlStaticPoolName.SelectedValue));
If the string contains double Number it Cant be directly converted to Int. If this not Solve your problem you must give an Example of ddlStaticPoolName.SelectedValue.
If the string Contains Non numerical characters. Then you should use TryParse.
int num;
Int32.TryParse(ddlStaticPoolName.SelectedValue, out num);
objUserEntity.POOlID = num;
If the string contains invalid number. TryParse will set the value of num to 0. otherwise to the value Converted from string.
If you try this solutions one of them must solve your problem. But Try First solution then go To the next solution.

Input string was not in a correct format when converting to integer

In line:
int d = Convert .ToInt32 ( TxtAmount.Text);
there is an error
Input string was not in a correct format
I want to convert the number inside TxtAmount.Text. if it's a negative number to decimal or integer without - and then convert it again to string because ConvertNumbersToArabicAlphabet the parameter is string.
int d = Convert .ToInt32 ( TxtAmount.Text);
ConvertNumbersToArabicAlphabet a = new ConvertNumbersToArabicAlphabet(d.ToString());
Label2.Text = a.GetNumberAr();
I'd check whether the input is numeric first and then convert, using Math.Abs to make sure the result is always a positive number:
int result = 0;
// Does text contain numbers only (and maybe a leading "-")?
if (Regex.IsMatch(TxtAmount.Text, #"^-?[0-9]+$"))
{
// Try to parse an int from it. If successful, convert it to
// a positive number in any case (= ignore the leading "-")
if (Int32.TryParse(TxtAmount.Text, out result))
result = Math.Abs(result);
}
// In all other cases, the result is 0
return result;
int d = Convert .ToInt ( TxtAmount.Text);
You can use this if you have a Integer Value within the textbox .
If text area contain only a single character then it's not work anymore.
try to put only Integer of same type of data you want to convert in to textbox
like if you want to add a double number then you can use.
Double num = Convert .ToDouble ( TxtAmount.Text);
if your textbox is empty may sure that you have validation or check for the same:
if(TxtAmount.Text==""||TxtAmount.Text=string.Empty)
{
TxtAmount.Text=0;
}
else
{
int d = Convert .ToInt ( TxtAmount.Text);
}
If all you want is to ignore the negative sign, then you can do string manipulation like:
string value = TxtAmount.Text;
if (value.StartsWith("-"))
{
value = value.Substring(1);
}
This is because Youse textbox is empty.
check weather your textbox have values or not
if(!String.IsNullOrWhiteSpace(TxtAmount.Text))
{
int d = Convert .ToInt32 ( TxtAmount.Text);
}

Convert from string to int in c# Using Convert.ToInt32

I have a simple code in c# that converts a string into int
int i = Convert.ToInt32(aTestRecord.aMecProp);
aTestRecord.aMecProp is of string. The test I am running, during that it has values of 1.15 in string.
but above line throws error saying that input string wasn't in a format!
I don't understand why?
I am using VS 2008 c#
An integer can only represent strings without a decimal part.
1.15 contains a decimal part of 0.15.
You have to convert it into a float to keep the decimal part and correctly parse it:
float f = Convert.ToSingle(aTestRecord.aMecProp);
That is because 1.xx is not a integer valid value. You could truncate before converting to Int32, for sample:
int result = (int)(Math.Truncate(double.Parse(aTestRecord.aMecProp)* value) / 100);
if you are trying to validate that a string is an integer, use TryParse()
int i;
if (int.TryParse(aTestRecord.aMecProp, out i))
{
}
i will get assigned if TryParse() is successful
Try this:
double i = Convert.ToDouble(aTestRecord.aMecProp);
Or if you want the integer part:
int i = (int) Convert.Double(aTestRecord.aMecProp);
You can convert to double and then typecast it
string str = "1.15";
int val = (int)Convert.ToDouble(str);
Just try this,
Int32 result =0;
Int32.TryParse(aTestRecord.aMecProp, out result);
Do you need a C# equivalent for the JavaScript parseInt function? I have used this one on occasion:
public int? ParseInt(string value)
{
// Match any digits at the beginning of the string with an optional
// character for the sign value.
var match = Regex.Match(value, #"^-?\d+");
if(match.Success)
return Convert.ToInt32(match.Value);
else
return null; // Because C# does not have NaN
}
...
var int1 = ParseInt("1.15"); // returns 1
var int2 = ParseInt("123abc456"); // returns 123
var int3 = ParseInt("abc"); // returns null
var int4 = ParseInt("123"); // returns 123
var int5 = ParseInt("-1.15"); // returns -1
var int6 = ParseInt("abc123"); // returns null
ok I think this is
float d = Convert.ToSingle(aTestRecord.aMecProp);

How to use Substring , to return an integer of all the values after the first char

I have an string AssetNumber that have the following format C100200.
so i need to do the folloiwng:-
Get all the characters after the first (e.g. 100200 using above example)
Convert the substring to integer
Return the integer + 1
but I do not know how to use the sub-string to get all the characters after the first char, and how to convert string into int? Any help on this will be appreciated.
var result = Int32.Parse("C100200".Substring(1)) + 1;
If you would like to have default value, if you can't parse current string:
int result;
if (!Int32.TryParse("sdfsdf".Substring(1), out result)) {
result = 42;
}
result+=1;

Categories