Почему 0.ToString ("#. ##") возвращает пустую строку вместо 0,00 или хотя бы 0? - PullRequest
110 голосов
/ 25 января 2012

Почему 0.ToString("#.##") возвращает пустую строку?Разве это не должно быть 0.00 или как минимум 0 ?

Ответы [ 5 ]

179 голосов
/ 25 января 2012

# в строковом формате означает, что значение является необязательным.Если вы хотите получить вывод 0.00, вам необходимо следующее:

0.ToString("0.00");

См. Здесь для пользовательских числовых форматов , которые можно передать этому методу.

130 голосов
/ 25 января 2012

Поскольку в строке формата # используется для обозначения необязательного символьного заполнителя; используется только если необходимо для представления числа.

Если вы сделаете это вместо: 0.ToString("0.##");, вы получите: 0

Интересно, если вы сделаете это: 0.ToString("#.0#"); вы получите: .0

Если вам нужны все три цифры: 0.ToString("0.00"); выдает: 0.00


Из комментариев к этому ответу ваш аргумент выглядит так:

он должен показывать '0', потому что зачем кому-то видеть пустую строку, если числовое значение равно 0?

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

20 голосов
/ 26 января 2012

В соответствии с документацией о цифровом заполнителе .

Если форматируемое значение имеет цифру в позиции, где в строке формата появляется символ «#», то эта цифра копируется в строку результата. Иначе ничего хранится в этой позиции в строке результата. Этот спецификатор никогда не отображает символ «0», если он не является значащей цифрой, даже если «0» является единственной цифрой в строке. Будет отобразить символ «0», если это значащая цифра в отображаемом числе. Строка формата "##" приводит к тому, что значение округляется до ближайшей цифры, предшествующей десятичная дробь, где всегда используется округление от нуля. Например, форматирование 34,5 с помощью «##» приведет к значению 35.

Если вы хотите, чтобы ноль отображался, используйте Zero PlaceHolder

Если форматируемое значение имеет цифру в позиции, где в строке формата появляется «0», то эта цифра копируется в строку результата. Положение Крайний левый «0» перед десятичной запятой и крайний правый «0» после десятичной запятой определяет диапазон цифр, которые всегда присутствуют в строке результата.
Спецификатор «00» приводит к тому, что значение округляется до ближайшей цифры, предшествующей десятичной дроби, где всегда используется округление от нуля. Например, форматирование 34,5 с "00" приведет к значению 35.

2 голосов
/ 12 апреля 2018

Попробуйте это 0.ToString("#,##; #,##;0")

https://docs.microsoft.com/en-us/dotnet/standard/base-types/custom-numeric-format-strings#SectionSeparator

Первый раздел относится к положительным значениям, второй раздел относится к отрицательным значениям, а третий раздел относится к нулям.

0 голосов
/ 20 мая 2019

Используйте это так:

0.ToString("#0.##")

0 после # обеспечит установку выходного значения равным 0, если значение равно 0, иначе будет отображаться значение. Так 0.0.ToString("#0.##")=0.00 и 10.ToString("#.##")=10.00

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