Какой самый быстрый / лучший способ отформатировать? Двойной в валюте для вывода строки в C #? - PullRequest
0 голосов
/ 28 октября 2009

При использовании .ToString ("{blah}") выдает ошибку, потому что это "двойной, а не двойной ..." плохой параметр "и т. Д.

Обратите внимание, что это не похоже на работу, иногда я получаю '5.7':

double itemListPrice = Math.Round((double)((item.UserIntervalPrice * item.Volume) - 
    ((item.UserIntervalPrice * item.Volume) * (item.VolumeDiscount / 100))),2);

htmlReceipt += "<tr><td>" + item.Title + "</td><td>" + item.Description + "</td><td>" + 
    item.Volume + "</td><td>$" + itemListPrice.ToString() + "</td></tr>";

Ответы [ 4 ]

3 голосов
/ 28 октября 2009

Вы пробовали:

double? myDouble = 10.5;

if (myDouble.HasValue)
{
    string currency = myDouble.Value.ToString("c");
}
2 голосов
/ 28 октября 2009

Я считаю, что хорошо работает следующее:

double? val1 = null;
double? val2 = 5.7d;

var s1 = string.Format("{0:c}", val1);  // outputs: ""
var s2 = string.Format("{0:c}", val2);  // outputs: $5.70

Я бы не стал сильно беспокоиться о производительности в этом случае, и сам бы больше заботился о правильности и ясности.

Я бы также предложил вам рассмотреть возможность использования string.Format() или StringBuilder вместо отдельных фрагментов строк. Не это огромная сделка, но она без необходимости выделяет и отбрасывает промежуточные строки; который, если вы беспокоитесь о производительности, вы, вероятно, захотите устранить; например:

htmlReceipt += 
   string.Format( "<tr><td>{0}</td><td>{1}</td><td>{2}</td><td>{3:c}</td></tr>",
                   item.Title, item.Description, item.Volume, item.listPrice );
1 голос
/ 28 октября 2009

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

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

ОК, похоже, это работает:

((double)theVariable).ToString("c");
...