By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
440,686 Members | 1,510 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 440,686 IT Pros & Developers. It's quick & easy.

double.Parse(double.MaxValue.ToString()) yields an Exception

P: n/a
"double.Parse(double.MaxValue.ToString())" yields the following Exception:

Value was either too large or too small for a Double.
at System.Number.ParseDouble(String value, NumberStyles options,
NumberFormat
Info numfmt)
at System.Double.Parse(String s, NumberStyles style, NumberFormatInfo info)
at System.Double.Parse(String s)
...

Even double.Parse((double.MaxValue -1).ToString()) states the same error
message.

That's completly illogical. Is this an error or my misunderstanding?
Nov 17 '05 #1
Share this Question
Share on Google+
5 Replies


P: n/a
Hello,

Problem is caused by rounding in the default implementation of ToString
method. In the example you gave, method creates a string presentation of a
number rounded to a value that is larger than the largest double number
allowed. So, when you try to parse that string, it throws an exception. You
can check this comparing following two outputs:

Console.WriteLine(double.MaxValue.ToString());
Console.WriteLine(double.MaxValue.ToString("E20")) ;

Therefore this code:

double.Parse(double.MaxValue.ToString("E20"))

will not throw the exception.

Regards,

Julijan
"Markus Kling" <Ma*********@discussions.microsoft.com> wrote in message
news:26**********************************@microsof t.com...
"double.Parse(double.MaxValue.ToString())" yields the following Exception:

Value was either too large or too small for a Double.
at System.Number.ParseDouble(String value, NumberStyles options,
NumberFormat
Info numfmt)
at System.Double.Parse(String s, NumberStyles style, NumberFormatInfo info) at System.Double.Parse(String s)
...

Even double.Parse((double.MaxValue -1).ToString()) states the same error
message.

That's completly illogical. Is this an error or my misunderstanding?

Nov 17 '05 #2

P: n/a
Julijan Sribar wrote:
Problem is caused by rounding in the default implementation of ToString
method. In the example you gave, method creates a string presentation of a
number rounded to a value that is larger than the largest double number
allowed. So, when you try to parse that string, it throws an exception. You
can check this comparing following two outputs:

Console.WriteLine(double.MaxValue.ToString());
Console.WriteLine(double.MaxValue.ToString("E20")) ;


An alternative format specified to use is "R", which is the round-trip
specifier - it always preserves enough information to complete the
format/parse cycle.

Jon

Nov 17 '05 #3

P: n/a
Sure, that was it. I should drink more coffee.
Thanks a bunch ;)
Nov 17 '05 #4

P: n/a
Just for completion. The recoverable format is not really recoverable. It
does NOT preseve the milliseconds. You have to serialize the DateTime
(timestamp) as long if you want to preserve them.

Markus
"Jon Skeet [C# MVP]" <sk***@pobox.com> schrieb im Newsbeitrag
news:11*********************@g49g2000cwa.googlegro ups.com...
Julijan Sribar wrote:
Problem is caused by rounding in the default implementation of ToString
method. In the example you gave, method creates a string presentation of
a
number rounded to a value that is larger than the largest double number
allowed. So, when you try to parse that string, it throws an exception.
You
can check this comparing following two outputs:

Console.WriteLine(double.MaxValue.ToString());
Console.WriteLine(double.MaxValue.ToString("E20")) ;


An alternative format specified to use is "R", which is the round-trip
specifier - it always preserves enough information to complete the
format/parse cycle.

Jon

Nov 17 '05 #5

P: n/a
Markus Kling <ma**********@nospam.nospam> wrote:
Just for completion. The recoverable format is not really recoverable. It
does NOT preseve the milliseconds. You have to serialize the DateTime
(timestamp) as long if you want to preserve them.


The round-trip specifier is a *numeric* specifier. "R" for DateTime
means RFC1123.

--
Jon Skeet - <sk***@pobox.com>
http://www.pobox.com/~skeet Blog: http://www.msmvps.com/jon.skeet
If replying to the group, please do not mail me too
Nov 17 '05 #6

This discussion thread is closed

Replies have been disabled for this discussion.