Формат десятичного значения в валюту с 2 десятичными знаками [дубликат]

этот вопрос уже есть ответ здесь:

я получаю данные из csv-файла и анализирую его в своем приложении. В моем csv-файле у меня есть столбец price значение которого я использую как, конечно, и цену товара в моем проект.

однако цена в csv-файле не содержит трейлинг 0s, Например, если цена and item .00, файл csv имеет его как , если цена .60, csv имеет его как .6. Другие цены, такие как все в порядке.

вот как я получаю цену из файла csv:

 Price = string.IsNullOrEmpty(columns[3].Trim()) ?
     null : (decimal?)decimal.Parse(columns[3]), 

в моем классе Price определяется как public decimal? Price { get; set; }.

Как отформатировать то, что возвращается, чтобы исправить это проблема?

Price = String.Format("Price: {0:C}", 
     string.IsNullOrEmpty(columns[3].Trim()) ? 
        null : (decimal?)decimal.Parse(columns[3]));

я пробовал выше, но не работал.

как это исправить, чтобы значения в csv как .9 форматируются для .90.

EDIT:

пробовал:

Price=decimal.Round(string.IsNullOrEmpty(columns[3].Trim()) ? 
    null : 
    (decimal?)decimal.Parse(columns[3]), 2, MidpointRounding.AwayFromZero);

не уверен, что я сделал это правильно?

кроме того, я не уверен, как я могу использовать следующую опцию в моем коде:

decimalVar.ToString ("#.##");

тоже пробовал:

 Price = string.IsNullOrEmpty(columns[3].Trim()) ? 
      null : (decimal?)decimal.Parse(columns[3], NumberStyles.Currency)

но все равно не работает.

3 ответов


вы ищете "0:C2" посмотреть Стандартные Строки Числового Формата

спецификатор точности: количество десятичных цифр

пример:

 String.Format("{0:C2}", 5d); //results in .00
 String.Format("{0:C2}", 5.9d); //results in .90
 String.Format("{0:C2}", 5.123d); //results in .12

этот ответ будет предполагать, что ваш символ местной валюты $.

использовать Decimal.Parse(String, NumberStyles) чтобы разобрать строку, i.e:

string priceFromCsv = "";
var priceAsDecimal = Decimal.Parse(priceFromCsv, NumberStyles.Currency);

затем использовать Decimal.ToString(String) с форматом "C", чтобы вернуться к полностью сформированной валюте, т. е.

priceAsDecimal.ToString("C");

Это даст вам полностью сформированную валюту с правильным количеством десятичных знаков.


decimals не имеют "формата" - это просто число. Похоже, вы пытаетесь "назначить" формат Price столбец, который вы не можете сделать. Основываясь на вашем первом примере кода, кажется, что вы можете проанализировать ввод CSV до десятичного знака.

вы можете выбрать формат, когда вы дисплей значение, которое вы не указали, где это произойдет. В приложении? отчет? другой КШМ?