Как преобразовать double в строку без разрешения до 10 (E-05)

Как преобразовать double в строку без разрешения до 10 (E-05)

double value = 0.000099999999833333343; string text = value.ToString(); Console.WriteLine(text); // 9,99999998333333E-05 

Я бы хотел, чтобы текст строки был 0.000099999999833333343 (или почти это, я не занимаюсь ракетной наукой 🙂

Я пробовал следующие варианты

 Console.WriteLine(value.ToString()); // 9,99999998333333E-05 Console.WriteLine(value.ToString("R20")); // 9,9999999833333343E-05 Console.WriteLine(value.ToString("N20")); // 0,00009999999983333330 Console.WriteLine(String.Format("{0:F20}", value)); // 0,00009999999983333330 

Выполнение tostring N20 или формата F20 кажется самым близким к тому, что я хочу, но в итоге у меня много конечных нhive, есть ли разумный способ избежать этого? Я бы хотел как можно ближе к двойному представлению 0.000099999999833333343

Используйте String.Format () с спецификатором формата . Я думаю, вы хотите {0: F20} или около того.

 string formatted = String.Format("{0:F20}", value); 

Вам не нужен string.Format() . Просто поместите правильную строку формата в существующий .ToString() . Что-то вроде «N» должно делать.

Как насчет

 Convert.ToDecimal(doubleValue).ToString() 

Используйте string.Format с соответствующим спецификатором формата.

В этом блоге есть много примеров: http://blogs.msdn.com/kathykam/archive/2006/03/29/564426.aspx