String format numerik khusus untuk selalu menampilkan tanda


188

Apakah ada cara saya dapat menentukan string format numerik standar atau kustom untuk selalu menampilkan tanda, baik itu + ve atau -ve (meskipun apa yang harus dilakukan untuk nol, saya tidak yakin!)

Jawaban:


297

Ya kamu bisa. Ada pemformatan bersyarat. Lihat pemformatan bersyarat di MSDN

misalnya:

string MyString = number.ToString("+0;-#");

Dimana setiap bagian yang dipisahkan oleh titik koma mewakili angka positif dan negatif

atau:

string MyString = number.ToString("+#;-#;0");

jika Anda tidak ingin nol memiliki tanda tambah.


1
Memperbaiki bug yang negatifnya tidak mendapat minus.
Roman Starkov

Terima kasih banyak! Saya telah mematahkan kepala saya selama satu jam untuk mencari tahu apa yang setara dengan '+' - bendera printf di C # dan Anda memberi saya jawaban.
rbaleksandar

4
dengan +#;-#, untuk nilai 0 saya mendapatkan hanya "+", tanpa sebenarnya 0. untuk saya, saya ingin 0 tampil sebagai "0", sehingga karya ini: +#;-#;+0.
orion elenzil

3
Terima kasih! Mencampur ini dengan ''akan melakukan hal-hal hebat! Lihat ini Changes.ToString("'('#' ▲)';'('#' ▼)';''"):! Ini menghemat banyak waktu dan ratusan ifpernyataan! :)
Shahab

1
@orionelenzil Saya punya masalah yang sama. Anda juga bisa melakukannya +0;-#daripada +#;-#;+0jawaban ini benar-benar menyesatkan bagi saya.
Kamil Szot

56

Hati-hati, saat menggunakan pemformatan bersyarat nilai negatif tidak secara otomatis mendapatkan tanda. Yang perlu Anda lakukan

string MyString = number.ToString("+#;-#;0");

Seperti yang ditunjukkan orang lain, +0;-#memberi Anda hasil yang sama dengan kode bersih.
Andrew

32

Anda juga dapat menggunakan format string dalam string.Format (); string format dipisahkan dari indeks dengan titik dua (':')

var f = string.Format("{0}, Force sign {0:+#;-#;+0}, No sign for zero {0:+#;-#;0}", number);

Untuk angka {+1, -1, 0} ini memberi:

1, Angkatan tanda +1, Tidak ada tanda untuk nol +1
-1, Angkatan tanda -1, Tidak ada tanda untuk nol -1
0, Angkatan tanda +0, Tidak ada tanda untuk nol 0

Anda juga dapat menggunakan string yang diinterpolasi alih-alih string.Formatmendapatkan hasil yang sama:

var f = $"{number}, Force sign {number:+#;-#;+0}, No sign for zero {number:+#;-#;0}";

Baris terakhir dari jawaban Anda harus mengatakan "Format default 0, tanda memaksa +, Tidak ada tanda untuk nol 0." karena itulah hasil sebenarnya dari +#;-#format untuk nilai 0
Kamil Szot

Terima kasih, Kamil - saya melewatkannya. Saya sekarang telah mengoreksi format tanda gaya: + #; - #; + 0 (bukan + #; - #)
Edward

1
Anda bisa mendapatkan perilaku tanda kekuatan dengan format sederhana: +0;-#. :)
Andrew

@ Andrew, Memang, tapi aku lebih suka +#;-#;+0lebih +#;-#karena hal ini membuatnya lebih jelas bahwa 0 akan diformat sebagai 0
Edward

10

Bertentangan dengan jawaban lain, tampaknya jika Anda ingin mendapatkan +1, -1, +0 (untuk argumen 1, -1, 0) Anda perlu menggunakan format:

String.Format("{0:+#;-#;+0}", 0));  // output: +0

atau

String.Format("{0:+0;-#}", 0));  // output: +0

Jika Anda menggunakan hanya +#;-#itu akan menampilkan hanya +(tidak +0) untuk 0.

Specifier Kustom "#" (di https://msdn.microsoft.com/en-us/library/0c899ak8.aspx )

Perhatikan bahwa specifier ini tidak pernah menampilkan nol yang bukan digit signifikan, bahkan jika nol adalah satu-satunya digit dalam string. Ini akan menampilkan nol hanya jika itu adalah angka signifikan dalam jumlah yang sedang ditampilkan.

Juga harap diingat bahwa jika Anda membutuhkan ketelitian desimal, Anda perlu menentukannya seperti itu:

String.Format("{0:+0.##;-#.##}", 0));  // output: +0

atau, jika Anda tidak ingin nol untuk selalu muncul, seperti itu:

String.Format("{0:+0.00;-#.00}", 0));  // output: +0.00

1

Untuk ekspresi numerik dari jenis apa pun:

+###,###,###,###,###,###,###,###,###,##0.###,###,###,###,###,###,###,###,###,###;-###,###,###,###,###,###,###,###,###,##0.###,###,###,###,###,###,###,###,###,###;0

Gunakan tiga bagian untuk tiga kasus: positif, negatif, nol

Aspek lain dari contoh:

  • Nol tidak ditandatangani. Anda bisa menampilkannya sebagai apa saja, seperti "nol".

  • Nilai absolut kurang dari satu memiliki 0 di depan sebelum titik desimal. Sesuaikan dengan selera.

  • Jumlah digit adalah untuk nilai desimal absolut terbesar dan terkecil. Sesuaikan dengan selera.

  • Karakter titik desimal spesifik untuk budaya. Pengganti .NET.

  • Pemisah pengelompokan adalah opsional. Karakternya spesifik budaya. Pengganti .NET. (Posisi juga khusus untuk budaya tetapi hanya dikontrol oleh string format Anda.) Anda juga menggunakan karakter lain kecuali karakter khusus untuk Format (yang termasuk,. # 0).


0

Saya tidak dapat berkomentar, jadi saya Lakukan jawaban di sini (sistem reputasi gila ....)

Anda dapat menggunakan number.ToString ("+ 0; - #") dengan sangat baik untuk Menghasilkan UTC String TimeFormat

Di sini ditampilkan dalam kode PowerShell

"$([System.DateTime]::Now.ToString('HH:mm:ss.fff'))$($([System.TimeZoneInfo]::Local.GetUtcOffset([System.DateTime]::Now).TotalMinutes.ToString('+0;-#')))"

@ Gcores terima kasih https://stackoverflow.com/users/40256/gcores

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.