Home All Groups Group Topic Archive Search About

Double.MaxValue Casting Problems

Author
15 Feb 2007 4:26 PM
Kevin Blakeley
I have some code that takes Double.MaxValue and converts it to a string, but
when I try to convert it back to a double, it fails.  Shouldn't the value be
able to be converted back to a double without error? 

Here is a simple code sample that demonstrates the problem:

            try
            {
                Double dbl = double.MinValue;
                //String sdbl = dbl.ToString();  // This errors as well
                String str = dbl.ToString("N");

                // This throws   "Value was either too large or too small
for a Double."
                Double dbl2 = Convert.ToDouble(str);
            }
            catch (Exception ex)
            {
                System.Diagnostics.Debug.Write(ex.Message);
            }

Author
15 Feb 2007 4:58 PM
Laura T.
Floating point operations are always approximative, conversions of them to
string even worse.
If you need to convert, it might be better to check the inherent limits
(Min/Max/Infinity etc) and handle them as special case, like:

Double dbl2;

if(str!=double.MinValue.ToString())
    dbl2 = Convert.ToDouble(str);
else
    dbl2=double.MinValue


Show quote
"Kevin Blakeley" <KevinBlake***@discussions.microsoft.com> ha scritto nel
messaggio news:13280E1B-CDAC-4939-B829-B9FA2CADB7D8@microsoft.com...
>I have some code that takes Double.MaxValue and converts it to a string,
>but
> when I try to convert it back to a double, it fails.  Shouldn't the value
> be
> able to be converted back to a double without error?
>
> Here is a simple code sample that demonstrates the problem:
>
>            try
>            {
>                Double dbl = double.MinValue;
>                //String sdbl = dbl.ToString();  // This errors as well
>                String str = dbl.ToString("N");
>
>                // This throws   "Value was either too large or too small
> for a Double."
>                Double dbl2 = Convert.ToDouble(str);
>            }
>            catch (Exception ex)
>            {
>                System.Diagnostics.Debug.Write(ex.Message);
>            }
Author
15 Feb 2007 9:53 PM
Peter Bromley
Kevin Blakeley wrote:
Show quote
> I have some code that takes Double.MaxValue and converts it to a string, but
> when I try to convert it back to a double, it fails.  Shouldn't the value be
> able to be converted back to a double without error? 
>
> Here is a simple code sample that demonstrates the problem:
>
>             try
>             {
>                 Double dbl = double.MinValue;
>                 //String sdbl = dbl.ToString();  // This errors as well
>                 String str = dbl.ToString("N");
>
>                 // This throws   "Value was either too large or too small
> for a Double."
>                 Double dbl2 = Convert.ToDouble(str);
>             }
>             catch (Exception ex)
>             {
>                 System.Diagnostics.Debug.Write(ex.Message);
>             }
Perhaps you should try the round-trip format string instead

String str = dbl.ToString("R");


Peter
Author
15 Feb 2007 10:01 PM
Kevin Blakeley
Thanks!  That worked like a champ.  I tried a few of the fomatting types but
did not try that one.  I even tested to see if my value was equal to
Double.Minvalue and it evaluated to true.

Thanks again.

Show quote
"Peter Bromley" wrote:

> Kevin Blakeley wrote:
> > I have some code that takes Double.MaxValue and converts it to a string, but
> > when I try to convert it back to a double, it fails.  Shouldn't the value be
> > able to be converted back to a double without error? 
> >
> > Here is a simple code sample that demonstrates the problem:
> >
> >             try
> >             {
> >                 Double dbl = double.MinValue;
> >                 //String sdbl = dbl.ToString();  // This errors as well
> >                 String str = dbl.ToString("N");
> >
> >                 // This throws   "Value was either too large or too small
> > for a Double."
> >                 Double dbl2 = Convert.ToDouble(str);
> >             }
> >             catch (Exception ex)
> >             {
> >                 System.Diagnostics.Debug.Write(ex.Message);
> >             }
> Perhaps you should try the round-trip format string instead
>
> String str = dbl.ToString("R");
>
>
> Peter
>

AddThis Social Bookmark Button