Почему 0.ToString («#. ##») возвращает пустую строку вместо 0.00 или как минимум 0?

114

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

user960567
источник

Ответы:

185

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

0.ToString("0.00");

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

Рич О'Келли
источник
3
Еще меня смущало одно: почему результат не 0. Потому что 0 не является обязательным. Пусто имеет смысл?
user960567
135

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

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

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

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


Судя по комментариям к этому ответу, ваш аргумент выглядит так:

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

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

Эндрю Барбер
источник
20

Согласно документации о Digit Placeholder .

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

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

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

Мигель Мадеро
источник
-1

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

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

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

user11530336
источник