Преобразование double в строку с N десятичными знаками, точка в качестве десятичного разделителя и без разделителя тысяч - PullRequest
46 голосов
/ 02 ноября 2010

Мне нужно преобразовать десятичную дробь в строку с N десятичными (двумя или четырьмя) и без разделителя тысяч:

'XXXXXXX (точка) DDDDD'

Проблема с CultureInfo.InvariantCulture заключается в том, что есть места ',' для разделения тысяч.

UPDATE

Это должно работать для десятичных и двойных типов.

<Ч />

Мой предыдущий вопрос: Необходимо преобразовать двойные или десятичные числа в строку

Ответы [ 6 ]

94 голосов
/ 02 ноября 2010

Для decimal используйте метод ToString и укажите культуру инварианта, чтобы получить точку в качестве десятичного разделителя:

value.ToString("0.00", System.Globalization.CultureInfo.InvariantCulture)

Тип long является целым числом, поэтому дробная часть отсутствует. Вы можете просто отформатировать его в строку и добавить несколько нулей:

value.ToString() + ".00"
34 голосов
/ 05 июля 2011

Очень легко указать собственный десятичный разделитель. Просто у меня ушло около 2 часов, чтобы понять это: D. Вы видите, что использовали текущую или другую культуру, которую вы указали правильно? Ну, единственное, что нужно парсеру - это IFormatProvider. Если вы даете это CultureInfo.CurrentCulture.NumberFormat как средство форматирования, он отформатирует двойное число в соответствии с NumberDecimalSeparator вашей текущей культуры. Я просто создал новый экземпляр класса NumberFormatInfo и установил для его свойства NumberDecimalSeparator любую строку-разделитель, которую я хотел. Полный код ниже:

double value = 2.3d;
NumberFormatInfo nfi = new NumberFormatInfo();
nfi.NumberDecimalSeparator = "-";
string x = value.ToString(nfi);

Результат? "2-3"

3 голосов
/ 08 января 2014

Я предпочитаю использовать ToString() и IFormatProvider.

double value = 100000.3
Console.WriteLine(value.ToString("0,0.00", new CultureInfo("en-US", false)));

Вывод: 10000,30

0 голосов
/ 15 апреля 2015

Я думаю, вы могли бы использовать:
value.ToString("F"+NumberOfDecimals)

value = 10,502
value.ToString("F2") //10,50
value = 10,5 
value.ToString("F2") //10,50

Вот подробное описание строк числового формата

0 голосов
/ 22 января 2014
double value = 3.14159D;
string v = value.ToString().Replace(",", ".");
Console.WriteLine(v);

Выход: 3.14159

0 голосов
/ 02 ноября 2010

Вы можете просто использовать decimal.ToString ()

Для двух десятичных знаков

myDecimal.ToString("0.00");

Для четырех десятичных знаков

myDecimal.ToString("0.0000");

Это дает точку в качестве десятичного разделителя, ибез разделителя тысяч, независимо от культуры.

...