Still celebrating National IT Professionals Day with 3 months of free Premium Membership. Use Code ITDAY17

x
?
Solved

Double.Parse C#

Posted on 2008-10-28
7
Medium Priority
?
1,714 Views
Last Modified: 2013-12-17
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.


0
Comment
Question by:chudmarek
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
7 Comments
 
LVL 55

Accepted Solution

by:
Jaime Olivares earned 600 total points
ID: 22827610
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
 
LVL 12

Assisted Solution

by:jandromeda
jandromeda earned 300 total points
ID: 22827708
Can you give the two values which reproduces your issue? The Parse method is not rounding the numbers.
0
 

Author Comment

by:chudmarek
ID: 22827806
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
Containers & Docker to Create a Powerful Team

Containers are an incredibly powerful technology that can provide you and/or your engineering team with huge productivity gains. Using containers, you can deploy, back up, replicate, and move apps and their dependencies quickly and easily.

 
LVL 55

Assisted Solution

by:Jaime Olivares
Jaime Olivares earned 600 total points
ID: 22827835
where are you extracting the numbers from?
0
 
LVL 3

Expert Comment

by:trunghieubkit
ID: 22828013
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
 
LVL 3

Assisted Solution

by:trunghieubkit
trunghieubkit earned 300 total points
ID: 22828022
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
 
LVL 9

Assisted Solution

by:jhshukla
jhshukla earned 300 total points
ID: 22828254
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

Featured Post

Give Your Engineering Team a Productivity Boost

Learn why container technology is so powerful and how it can provide your team with productivity gains and other benefits.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Entity Framework is a powerful tool to help you interact with the DataBase but still doesn't help much when we have a Stored Procedure that returns more than one resultset. The solution takes some of out-of-the-box thinking; read on!
It was really hard time for me to get the understanding of Delegates in C#. I went through many websites and articles but I found them very clumsy. After going through those sites, I noted down the points in a easy way so here I am sharing that unde…
This is my first video review of Microsoft Bookings, I will be doing a part two with a bit more information, but wanted to get this out to you folks.
This tutorial will teach you the special effect of super speed similar to the fictional character Wally West aka "The Flash" After Shake : http://www.videocopilot.net/presets/after_shake/ All lightning effects with instructions : http://www.mediaf…

715 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question