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

15

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

<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>

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

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

Ваш Ответ

6   ответов
11

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

myDecimal.ToString("N"),

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

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

1

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

Пытаться:

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);
Он хочет5 остаться5.
ToString (& quot; C & quot;) мне очень помогло, спасибо за это
ОП говорит, что он хочет, чтобы десятичная часть была опущена, если она является целочисленным значением.
17

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

(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
(5.00) .ToString (& Quot; С & Quot;);
Вы не должны использовать5.00m и тому подобное?
Как это принятый ответ, когда правильный ответ был дан 11 минутами ранее?
7

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

ToString("0.00")

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

Похожие вопросы