Mengapa 0.ToString ("#. ##") mengembalikan string kosong alih-alih 0,00 atau setidaknya 0?

114

Mengapa 0.ToString("#.##")mengembalikan string kosong? Bukankah seharusnya 0.00atau setidaknya 0 ?

pengguna960567
sumber

Jawaban:

185

#dalam format string menunjukkan bahwa nilainya opsional. Jika Anda ingin mendapatkan hasilnya, 0.00Anda memerlukan yang berikut ini:

0.ToString("0.00");

Lihat di sini untuk format numerik kustom yang dapat diteruskan ke metode ini.

Rich O'Kelly
sumber
3
Satu hal yang masih membuatku bingung adalah mengapa hasilnya bukan 0. Karena 0 bukan opsional. Apakah kosong itu masuk akal?
pengguna960567
135

Karena dalam format string, #digunakan untuk menandai placeholder karakter opsional; itu hanya digunakan jika diperlukan untuk mewakili nomor tersebut.

Jika Anda melakukan ini sebagai gantinya: 0.ToString("0.##");Anda mendapatkan:0

Menariknya, jika Anda melakukan ini: 0.ToString("#.0#");Anda mendapatkan:.0

Jika Anda menginginkan ketiga digit tersebut: 0.ToString("0.00");menghasilkan:0.00


Dari komentar hingga jawaban ini, argumen Anda sepertinya,

itu harus menunjukkan '0', karena mengapa ada orang yang ingin melihat string kosong jika nilai numeriknya 0?

Tanggapannya sederhana: Anda memiliki pilihan bagaimana Anda ingin menampilkannya. Itulah gunanya string format kustom. Anda baru saja memilih string format yang salah untuk kebutuhan Anda .

Andrew Barber
sumber
20

Menurut dokumentasi tentang Digit Placeholder .

Jika nilai yang diformat memiliki digit di posisi di mana '#' muncul di string format, maka digit itu disalin ke string hasil. Jika tidak, tidak ada yang disimpan di posisi itu di string hasil. Penentu ini tidak pernah menampilkan karakter '0' jika itu bukan digit signifikan, meskipun '0' adalah satu-satunya digit dalam string. Ini akan menampilkan karakter '0' jika itu adalah digit signifikan dalam angka yang ditampilkan. String format "##" menyebabkan nilai dibulatkan ke digit terdekat sebelum desimal, dengan pembulatan menjauhi nol selalu digunakan. Misalnya, memformat 34.5 dengan "##" akan menghasilkan nilai 35.

Jika Anda ingin angka nol ditampilkan, gunakan Zero PlaceHolder

f nilai yang diformat memiliki digit pada posisi di mana '0' muncul dalam format string, kemudian digit tersebut disalin ke string hasil. Posisi paling kiri '0' sebelum koma desimal dan '0' paling kanan setelah koma desimal menentukan kisaran digit yang selalu ada dalam string hasil.
Penentu "00" menyebabkan nilai dibulatkan ke digit terdekat sebelum desimal, di mana pembulatan menjauhi nol selalu digunakan. Misalnya, memformat 34.5 dengan "00" akan menghasilkan nilai 35.

Miguel Madero
sumber
-1

Gunakan seperti ini:

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

0setelah #akan memastikan untuk mengatur nilai output ke 0 jika nilainya 0 selain itu akan menampilkan nilai. Jadi 0.0.ToString("#0.##")=0.00dan10.ToString("#.##")=10.00

pengguna11530336
sumber