Double.Parse C#

Hi Guys,

Hopefully an easy one.


I'm parsing two strings and converting them to doubles using double.Parse .

For example,

string1 = 2.32;
string2 = 2.37.

So i use if( double.Parse(string2) > double.Parse(string1)
{
//do something
}

The problem occurs, very rarely, that it will still go into "do something" even if string2 is not greater than string1. My values usually aren't so close....by that i mean that string1 and string2 values could be a lot further apart. So i'm wondering if there is any way that the double.Parse is rounding anything off, so when the values are too close like in the example above the statement holds true.

Thanks.


chudmarekAsked:
Who is Participating?
 
Jaime OlivaresConnect With a Mentor Software ArchitectCommented:
it shouldn't be rounding unless there is an unexpected character. Double.Parse expect a "perfect" number, unexpected characters can cause an exception or an unexpected behaviour.
0
 
jandromedaConnect With a Mentor Commented:
Can you give the two values which reproduces your issue? The Parse method is not rounding the numbers.
0
 
chudmarekAuthor Commented:
Hi,

I thought that double should stay as the exact number...it is just strange.

Jandromeda, I can't give two values because the values are always changing and no two values are ever the same.

0
The new generation of project management tools

With monday.com’s project management tool, you can see what everyone on your team is working in a single glance. Its intuitive dashboards are customizable, so you can create systems that work for you.

 
Jaime OlivaresConnect With a Mentor Software ArchitectCommented:
where are you extracting the numbers from?
0
 
trunghieubkitCommented:
as I know, there no function u want,
so u'll write it by yourself,
It's may help u,

private void button2_Click(object sender, EventArgs e)
{
	string string1 = "2.32";
	string string2 = "2.37";
 
	double d1 = double.Parse("2.321");
	double d2 = double.Parse("2.376");
 
	d1 = Truncate(d1, 2);
	d2 = Truncate(d2, 2);
 
	if (d2 > d1)
	{
		// Do
	}
}
 
private double Truncate(double val, int de)
{
	double dval = val*(Math.Pow(10,de));
 
	dval = Math.Round(dval);
 
	return dval / Math.Pow(10, de);
}

Open in new window

0
 
trunghieubkitConnect With a Mentor Commented:
exactly,
private void button2_Click(object sender, EventArgs e)
{
	string string1 = "2.32";
	string string2 = "2.37";
 
	double d1 = double.Parse(string1);
	double d2 = double.Parse(string2);
 
	d1 = Truncate(d1, 1);
	d2 = Truncate(d2, 1);
 
	if (d2 > d1)
	{
		// Do
	}
}
 
private double Truncate(double val, int de)
{
	double dval = val*(Math.Pow(10,de));
 
	dval = Math.Round(dval);
 
	return dval / Math.Pow(10, de);
}

Open in new window

0
 
jhshuklaConnect With a Mentor Commented:
This assumes that the strings do not contain any bad characters or spaces. and that strings represent positive numbers
int decimal_pos1 = str1.IndexOf('.');
if (decimal_pos1 == -1)
    decimal_pos1 = str1.Length;
 
int decimal_pos2 = str2.IndexOf('.');
if (decimal_pos2 == -1)
    decimal_pos2 = str2.Length;
 
if (decimal_pos2 > decimal_pos1)
    /*do something*/;
else if (decimal_pos1 == decimal_pos2)
    if (str2 > str1)
        /*do something*/;

Open in new window

0
All Courses

From novice to tech pro — start learning today.