2012-05-03 1 views
12

Для отображения валюты мы делаем:C# Decimal в строку для валюты

ToString("0.##") 

Для значения 5.00 выход есть:

5 

Для значения 5.98 выход:

5.98 

Для значения 5.90 выход:

5.9 

мне нужен третий случай, чтобы выйти с 2 десятичными точками, например:

5.90 

Как я могу это сделать без него влияния на другие результаты?

+0

какой-либо причине вы не можете использовать строку формата валюты? 'Value.ToString ("с")'? –

+3

Почему бы просто не использовать 'someDecimal.ToString (« c », новый CultureInfo (« en-US »))?? Затем он также применяет символ валюты. – Tejs

+0

@Tejs мы пишем наш собственный магазин, и он поддерживает несколько валют, которые не будут вписываться в дизайн очень хорошо, к сожалению, на этом этапе! –

ответ

15

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

(5.00).ToString("0.00").Replace(".00",""); // returns 5 
(5.90).ToString("0.00").Replace(".00", ""); // returns 5.90 
(5.99).ToString("0.00").Replace(".00", ""); // returns 5.99 
+0

разве вы не должны использовать '5.00m' и тому подобное? – Sebastian

+3

(5,00). ToString («C»); –

8

Try:

ToString("#,##0.00") 

Или просто:

ToString("C") 

Я не знаю встроенный способ расширить все два знака после запятой только тогда, когда оба не равны нулю. Вероятно, просто используйте для этого заявление if.

+3

Он хочет '5' остаться' 5'. – SLaks

+1

OP говорит, что он хочет, чтобы десятичная часть была опущена, если это целочисленное значение. – Jacob

+0

ToString («C») очень помог мне за это – Crouch

6

# означает, что если есть номер не оставить его пустым 0 означает поставить 0, если нет номер

ToString («0,00»)

+0

Спасибо за объяснение, я этого не знал. – VictorySaber

11

Вы можете использовать метод расширения, что-то вроде этого:

public static string ToCurrencyString(this decimal d) 
{ 
    decimal t = Decimal.Truncate(d); 
    if (d.Equals(t)) 
    { 
     return d.ToString("0.##"); 
    } 
    else 
    { 
     return d.ToString("#,##0.00"); 
    } 
} 
1

Не уверен, если я что-то отсутствует, но вы не можете просто сделать это:

decimal moneyvalue = 1921.39m; 
string html = String.Format("Order Total: {0:C}", moneyvalue); 
Console.WriteLine(html);