Нужен собственный формат валюты для использования с String.Format - PullRequest
13 голосов
/ 12 февраля 2009

Я пытаюсь использовать String.Format ("{0: c}", somevalue) в C #, но мне трудно понять, как настроить вывод для удовлетворения моих потребностей. Вот мои потребности:

  1. 0 выводит на пустой
  2. 1,00 выходов до $ 1,00
  3. 10,00 выходных до $ 10,00
  4. 100,00 выходных до $ 100,00
  5. 1000,00 выводит до $ 1000,00

Я пробовал String.Format ("{0: c}", somevalue), но для нулевых значений он выдает $ 0.00, что не то, что я хочу. Я также пробовал String.Format ("{0: $ 0,0.00; $ (0,0.00); #}", somevalue), но для 1.0 он выдает $ 01.00. String.Format ("{0: $ 0.00; $ (0.00); #}", somevalue) работает в большинстве случаев, но когда somevalue равно 1000.00, на выходе получается 1000.00 $.

Есть ли какой-нибудь формат, который подойдет для всех 5 случаев выше? Вся документация, которую я только что прочитал, подробно описывает основы и не затрагивает этот тип сценария.

Ответы [ 5 ]

19 голосов
/ 12 февраля 2009

Если вы используете

string.Format("{0:$#,##0.00;($#,##0.00);''}", value)

Вы получите "" для нулевого значения, а остальные значения также должны быть правильно отформатированы.

4 голосов
/ 12 февраля 2009

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

public static string ToCurrencyString (this decimal value)
{
  if (value == 0)
    return String.Empty;
  return value.ToString ("C");
}
4 голосов
/ 12 февраля 2009

Попробуйте что-то вроде этого:

String currency = (number == 0) ? String.Empty : number.ToString("c");
0 голосов
/ 13 ноября 2017

Форматы валюты "C" хороши до тех пор, пока вам не понадобится пробел для 0. Вот два способа, упомянутых выше, аналогичных тем, которые я использую, которые дают вам пробел для 0:

// one way
string.Format("{0:$#,##0.00;($#,##0.00);''}", somevalue)

// another way
somevalue.ToString("$#,##0.00;($#,##0.00);''")

Второй метод выглядит более "свободно", если вам нравится этот стиль кода (как и я).

0 голосов
/ 12 февраля 2009

Вот отличная ссылка, которая может оказаться полезной, которая обобщает эти данные: http://blog.stevex.net/string-formatting-in-csharp/

...