2009-10-28 2 views
0

При использовании .ToString ("{blah}") это дает ошибку, потому что это «двойной» не двойной ... «плохой параметр» и т. Д.Каков самый быстрый/лучший способ форматирования? Double для валюты для вывода строки в C#?

Обратите внимание, что это не работает, иногда я получаю ' 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>"; 

ответ

3

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

double? myDouble = 10.5; 

if (myDouble.HasValue) 
{ 
    string currency = myDouble.Value.ToString("c"); 
} 
+1

Примечание: вывод в качестве валюты включает в себя форматирование, такие как символ валюты, определенной информации, культуры текущего потока. –

+0

Конечно, подумал, что это то, о чем идет ОП. –

+0

@ Darin: Да, но его выходное форматирование в настоящее время включает жесткий код валюты. –

2

Я нахожу следующее работать достаточно хорошо:

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

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

+0

+1. «Двойной» и «валюта» никогда не должны появляться вместе в одном и том же предложении, если нет слов «не использовать» где-то посередине. –

0

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

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