c # Десятичный в строке для валюты

Для отображения валюты мы делаем:

<code>ToString("0.##")
</code>

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

<code>5
</code>

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

<code>5.98
</code>

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

<code>5.9
</code>

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

<code>5.90
</code>

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

 Tom Gullen03 мая 2012 г., 20:42
@Tejs, мы пишем наш собственный магазин, и он поддерживает несколько валют, которые, к сожалению, на данном этапе не очень хорошо вписываются в дизайн!
 Tom Gullen03 мая 2012 г., 20:44
@ Джейкоб, об этом я тоже думал, просто собираюсь стать PITA на этом этапе!
 Tejs03 мая 2012 г., 20:41
Почему бы просто не сделатьsomeDecimal.ToString("c", new CultureInfo("en-US"))? Затем также применяется символ валюты.
 Steve Danner03 мая 2012 г., 20:41
По какой причине вы не можете использовать строку формата валюты?value.ToString("c")?
 Jacob03 мая 2012 г., 20:43
Я не думаю, что вы можете сделать это с любыми строками встроенного или нестандартного формата (выборочно без десятичной точки или двух десятичных). Возможно, вам придется добавить логику, чтобы выбрать один или другой или реализовать свой собственныйIFormatProvider.

Ответы на вопрос(6)

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

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

Пытаться:

s.ToString("#,##0.00")

Или просто:

s.ToString("C")

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

int len = s.Length;
if (s[len - 2] == '0' && s[len - 1] == '0')
    s = s.Left(len - 3);
 03 мая 2012 г., 20:43
Он хочет5 остаться5.
 22 окт. 2014 г., 14:14
ToString (& quot; C & quot;) мне очень помогло, спасибо за это
 03 мая 2012 г., 20:44
ОП говорит, что он хочет, чтобы десятичная часть была опущена, если она является целочисленным значением.

myDecimal.ToString("N"),

С "N" Параметр преобразует десятичное число в строку, а количество отображаемых десятичных знаков будет определяться вашими настройками SO.

https://msdn.microsoft.com/en-us/library/system.globalization.numberformatinfo.numberdecimaldigits(v=vs.110).aspx

Решение Вопроса

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

(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
 28 февр. 2019 г., 03:24
Как это принятый ответ, когда правильный ответ был дан 11 минутами ранее?
 22 окт. 2014 г., 11:59
(5.00) .ToString (& Quot; С & Quot;);
 19 сент. 2012 г., 15:37
Вы не должны использовать5.00m и тому подобное?

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

ToString("0.00")

 28 июл. 2016 г., 18:45
Спасибо за объяснение, я этого не знал.

Ваш ответ на вопрос