Двойное преобразование в строку без научной записи - PullRequest
67 голосов
/ 10 октября 2009

Как преобразовать двойное в строковое представление с плавающей точкой без научной записи в .NET Framework?

«Маленькие» выборки (эффективные числа могут быть любого размера, например 1.5E200 или 1e-200):

3248971234698200000000000000000000000000000000
0.00000000000000000000000000000000000023897356978234562

Ни один из стандартных числовых форматов не похож на этот, и пользовательский формат также не позволяет иметь открытое число цифр после десятичного разделителя.

Это не дубликат Как преобразовать double в строку без представления степени 10 (E-05) , потому что ответы, которые там даны, не решают проблему под рукой , В этом вопросе было принято решение использовать фиксированную точку (например, 20 цифр), а это не то, чего я хочу. Форматирование с фиксированной точкой и обрезание избыточного 0 также не решает проблему, поскольку максимальная ширина для фиксированной ширины составляет 99 символов.

Примечание: решение должно правильно обрабатывать пользовательские числовые форматы (например, другой десятичный разделитель, в зависимости от информации о культуре).

Редактировать: Вопрос на самом деле только о перемещении вышеупомянутых чисел. Я знаю, как работают числа с плавающей запятой и какие числа можно использовать и вычислять с ними.

Ответы [ 17 ]

0 голосов
/ 27 октября 2010

я думаю, что вам нужно только использовать IFormat с

ToString(doubleVar, System.Globalization.NumberStyles.Number)

пример:

double d = double.MaxValue;
string s = d.ToString(d, System.Globalization.NumberStyles.Number);
0 голосов
/ 17 марта 2017
string strdScaleFactor = dScaleFactor.ToString(); // where dScaleFactor = 3.531467E-05

decimal decimalScaleFactor = Decimal.Parse(strdScaleFactor, System.Globalization.NumberStyles.Float);
0 голосов
/ 10 октября 2009

Просто основываясь на том, что сказал jcasso, вы можете настроить двойное значение, изменив экспоненту так, чтобы ваш любимый формат сделал это за вас, примените формат и затем дополните результат нулями для компенсации регулировка.

0 голосов
/ 22 мая 2012

Это прекрасно работает для меня ...

double number = 1.5E+200;
string s = number.ToString("#");

//Output: "150000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
0 голосов
/ 14 февраля 2012

Моим решением было использование пользовательских форматов. попробуйте это:

double d;
d = 1234.12341234;
d.ToString("#########0.#########");
0 голосов
/ 19 октября 2009

Будучи миллионами программистов по всему миру, всегда полезно попробовать поискать, если кто-то уже сталкивался с вашей проблемой. Иногда есть решения для мусора, а это значит, что пришло время написать свои собственные, а иногда есть отличные, такие как:

http://www.yoda.arachsys.com/csharp/DoubleConverter.cs

(подробности: http://www.yoda.arachsys.com/csharp/floatingpoint.html)

0 голосов
/ 10 октября 2009

Я могу ошибаться, но разве это не так?

data.ToString("n");

http://msdn.microsoft.com/en-us/library/dwhawy9k.aspx

...