Как преобразовать double в строку без степени представления в 10 (E-05) - PullRequest
12 голосов
/ 23 августа 2009

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

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

Я бы хотел, чтобы строка text была равна 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 кажется наиболее близким к тому, что я хочу, но я получаю много конечных нулей, есть ли умный способ избежать этого? Я хотел бы получить как можно ближе к двойному представлению 0,000099999999833333343

Ответы [ 4 ]

12 голосов
/ 23 августа 2009

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

string formatted = String.Format("{0:F20}", value);
5 голосов
/ 06 августа 2014

Как насчет

Convert.ToDecimal(doubleValue).ToString()
5 голосов
/ 23 августа 2009

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

4 голосов
/ 23 августа 2009

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

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

...