Нужен собственный формат валюты для использования с String.Format
-
23-08-2019 - |
Вопрос
Я пытаюсь использовать String.Format("{0:c}", somevalue) в C#, но мне трудно понять, как настроить вывод в соответствии с моими потребностями.Вот мои потребности:
- 0 выходов на пустой
- 1,00 выходов до 1,00 доллара США
- 10.00 выходы на 10.00$
- 100,00 выводит до 100,00 долларов США
- 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);''")
Второй метод кажется более «беглым», если вам нравится такой стиль кода (как и мне).