Чому 0.ToString ("#. ##") повертає порожній рядок замість 0,00 або принаймні 0?


114

Чому 0.ToString("#.##")повертається порожній рядок? Чи не повинна чи може вона бути 0.00або по крайней мере , 0 ?

Відповіді:


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 .

Якщо значення, яке відформатоване, має цифру в позиції, де у рядку формату відображається символ "#", то ця цифра копіюється в рядок результатів. В іншому випадку нічого не зберігається в цьому положенні в рядку результатів. Цей специфікатор ніколи не відображає символ "0", якщо він не є значною цифрою, навіть якщо "0" є єдиною цифрою у рядку. Він буде відображати символ "0", якщо це значна цифра в кількості, що відображається. Рядок формату "##" призводить до округлення значення до найближчої цифри, що передує десятковій, де завжди використовується округлення від нуля. Наприклад, форматування 34.5 з "##" призведе до значення 35.

Якщо ви хочете, щоб нуль відображався, використовуйте Zero PlaceHolder

f, якщо значення, яке відформатоване, має цифру в тому положенні, де у рядку формату відображається '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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.