Нужен собственный формат валюты для использования с String.Format

StackOverflow https://stackoverflow.com/questions/542690

  •  23-08-2019
  •  | 
  •  

Вопрос

Я пытаюсь использовать 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 случаям, указанным выше?Вся документация, которую я прочитал, подробно описывает только основы и не затрагивает сценарии такого типа.

Это было полезно?

Решение

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

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

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

Другие советы

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

String currency = (number == 0) ? String.Empty : number.ToString("c");

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

public static string ToCurrencyString (this decimal value)
{
  if (value == 0)
    return String.Empty;
  return value.ToString ("C");
}

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top