Проблема с двойным форматом C # - PullRequest
2 голосов
/ 31 декабря 2010

Я использую следующий код для форматирования двойного значения:

String.Format("${0:0,0.#}",...);

Это прекрасно работает, но когда числа меньше 10, у меня проблема.Числа отображаются как $ 03, $ 06, например.

Пожалуйста, посоветуйте мне правильную строку, чтобы иметь двойной номер в следующем формате ddd, ddd, ddd, ddd.dd

Ответы [ 5 ]

7 голосов
/ 31 декабря 2010

Попробуйте вместо этого:

string result = string.Format("${0:#,##0.00}", d);

Если ваш двойник представляет валюту, вы должны использовать:

string result = string.Format(CultureInfo.GetCultureInfo("en-US"), "{0:c}", d);

Обратите внимание, что если вы пропустите CultureInfo.InvariantCulture, на некоторых компьютерах он может отображаться с использованием чего-то отличного от $. Например, на моем компьютере string.Format("{0:c}", d) дает 2,00 kr, что может быть не тем, что вы хотели.

В вашем примере вам вообще не нужно использовать string.Format. Вы можете использовать это вместо:

string s = d.ToString("c", CultureInfo.GetCultureInfo("en-US"));

Помимо того, что он яснее и лаконичнее, он также имеет преимущество в том, что избегает бокса. Конечно, если ваша строка формата более сложная, чем в вашем примере, то имеет смысл использовать string.Format.

И в качестве последнего замечания я бы рекомендовал не использовать двойные числа для хранения валюты. Десятичный тип, вероятно, более уместен.

5 голосов
/ 31 декабря 2010

Использовать форматирование валюты:

String.Format("{0:C}", money);
3 голосов
/ 31 декабря 2010
String.Format("{0:C}", myDecimal);

или myDecimal.ToString ( "С");

будет отображаться с точностью до двух знаков после запятой, включая разделитель запятых и знак доллара (на основе настроек культуры) одним махом. Если вы хотите, чтобы оно заняло 1 или более 2 десятичных знаков, добавьте число после C (т.е. C3)

2 голосов
/ 31 декабря 2010
Digits after decimal point
// just two decimal places
String.Format("{0:0.00}", 123.4567);      // "123.46"
String.Format("{0:0.00}", 123.4);         // "123.40"
String.Format("{0:0.00}", 123.0);         // "123.00"

// max. two decimal places
String.Format("{0:0.##}", 123.4567);      // "123.46"
String.Format("{0:0.##}", 123.4);         // "123.4"
String.Format("{0:0.##}", 123.0);         // "123"
// at least two digits before decimal point
String.Format("{0:00.0}", 123.4567);      // "123.5"
String.Format("{0:00.0}", 23.4567);       // "23.5"
String.Format("{0:00.0}", 3.4567);        // "03.5"
String.Format("{0:00.0}", -3.4567);       // "-03.5"

Thousands separator
String.Format("{0:0,0.0}", 12345.67);     // "12,345.7"
String.Format("{0:0,0}", 12345.67);       // "12,346"

Zero
Following code shows how can be formatted a zero (of double type).

String.Format("{0:0.0}", 0.0);            // "0.0"
String.Format("{0:0.#}", 0.0);            // "0"
String.Format("{0:#.0}", 0.0);            // ".0"
String.Format("{0:#.#}", 0.0);            // ""

Align numbers with spaces
String.Format("{0,10:0.0}", 123.4567);    // "     123.5"
String.Format("{0,-10:0.0}", 123.4567);   // "123.5     "
String.Format("{0,10:0.0}", -123.4567);   // "    -123.5"
String.Format("{0,-10:0.0}", -123.4567);  // "-123.5    "

Custom formatting for negative numbers and zero
String.Format("{0:0.00;minus 0.00;zero}", 123.4567);   // "123.46"
String.Format("{0:0.00;minus 0.00;zero}", -123.4567);  // "minus 123.46"
String.Format("{0:0.00;minus 0.00;zero}", 0.0);        // "zero"

Some funny examples
String.Format("{0:my number is 0.0}", 12.3);   // "my number is 12.3"
String.Format("{0:0aaa.bbb0}", 12.3);          // "12aaa.bbb3"
0 голосов
/ 31 декабря 2010
String.Format("${0:#,0.#}",...); 

должен сделать это.См. Пользовательские строки числового формата

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...