Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Double ToString - No Scientific Notation [duplicate]

Tags:

I just came across the wonderful "feature" that .NET will by default do Double.ToString() using scientific notation if there are enough decimal places.

.005.ToString() // ".005" .00005.ToString() // "5E-05"  

Does anyone know an efficient way to get this to appear as a string in standard (non-scientific) notation?

I've seen this question, but the top two answers seem kind of hacky to me as they both do Double.ToString() and then just reformat the results.

Thanks for any help.

EDIT:

The desired output:

.00005.ToString() == ".00005" 

EDIT2:

What is with all the duplicate and close votes? I specifically say in the question that the similar question does not have a satisfactory answer. People on this website get way too power happy.

MY SOLUTION:

In case it's useful to anyone:

/// <summary> /// Converts the double to a standard notation string. /// </summary> /// <param name="d">The double to convert.</param> /// <returns>The double as a standard notation string.</returns> public static String ToStandardNotationString(this double d) {     //Keeps precision of double up to is maximum     return d.ToString(".#####################################################################################################################################################################################################################################################################################################################################");  } 

NOTE: This only works for values > 1. I haven't found an efficient way to do this for all values yet.

like image 531
MgSam Avatar asked Feb 19 '13 18:02

MgSam


1 Answers

See the Standard and Custom Numeric Format Strings. I think you're looking for ".################":

.00005.ToString(".################") // returns ".00005" 

It's somewhat hackish, yes, but it works, as long as you don't have more than that many places after the decimal. If you do, you might want to use a StringBuilder to build out about 330 #s in your string (double.Epsilon is on the order of E-324).

like image 195
Tim S. Avatar answered Sep 20 '22 21:09

Tim S.