Her zaman işareti görüntülemek için özel sayısal biçim dizesi


188

Ben her zaman işareti çıktı için standart veya özel bir sayısal biçim dizesi belirtebilirsiniz herhangi bir yolu var mı, + ve veya -ve (sıfır için ne yapmalı olsa da, emin değilim!)

Yanıtlar:


297

Evet yapabilirsin. Koşullu biçimlendirme var. Bkz . MSDN'de koşullu biçimlendirme

Örneğin:

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

Noktalı virgülle ayrılmış her bölümün pozitif ve negatif sayıları temsil ettiği

veya:

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

Eğer sıfırın artı işaretine sahip olmasını istemiyorsanız.


1
Negatiflerin eksi alamadığı bir hata düzeltildi.
Roman Starkov

Çok teşekkür ederim! C # 'daki printf bayrağının eşdeğerinin ne olduğunu bulmak için başımı bir saat kadar yakıyorum ve bana THE.
rbaleksandar

4
ile +#;-#, 0 değerine benim için hiçbir gerçek 0'a ile ben 0 bu eserlerin yüzden, "+0" olarak görünmesini istiyorum "+" sadece olsun: +#;-#;+0.
orion elenzil

3
Teşekkürler! ''Bunu karıştırmak harika şeyler yapar! Şuna bak: Changes.ToString("'('#' ▲)';'('#' ▼)';''")! Bana çok zaman ve yüzlerce ififade kazandırdı! :)
Şahab

1
@orionelenzil Ben de aynı sorunu yaşadım. Bunun +0;-#yerine de yapabilirsiniz . +#;-#;+0Bu cevap benim için gerçekten yanıltıcıydı.
Kamil Szot

56

Dikkat edin, koşullu biçimlendirme kullanırken negatif değer otomatik olarak bir işaret almaz. Yapman lazım

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

Diğerlerinin de belirttiği gibi, +0;-#daha temiz kodla aynı sonucu verir.
Andrew

32

Ayrıca string.Format (); biçim dizesi, iki nokta üst üste işaretiyle (':') dizinden ayrılır

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

{+1, -1, 0} sayısı için:

1, kuvvet işareti +1, sıfır yok
-1 -1, kuvvet işareti -1, sıfır -1
0 için işaret yok , kuvvet işareti +0, sıfır için 0 yok

string.FormatAynı sonucu elde etmek için enterpolasyonlu bir dize de kullanabilirsiniz :

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

Yanıtınızın son satırında "Varsayılan biçim 0, Zorla işareti +, Sıfır 0 işareti yok" yazmalıdır. çünkü bu +#;-#0 değeri için biçimin gerçek sonucudur
Kamil Szot

Teşekkürler Kamil - Bunu özledim. Şimdi kuvvet işareti formatını düzelttim: + #; - #; + 0 (+ #; - # yerine)
Edward

1
Sen daha basit biçimi ile kuvvet işareti davranışı elde edebilirsiniz: +0;-#. :)
Andrew

@ Andrew, Gerçekten de, ama tercih +#;-#;+0üzerinde +#;-#bu 0 +0 olarak biçimlendirilir daha anlaşılır yapar olarak
Edward

10

Diğer cevapların aksine +1, -1, +0 (1, -1, 0 argümanları için) almak istiyorsanız formatı kullanmanız gerektiği görülmektedir:

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

veya

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

Eğer sadece kullanırsanız sadece 0 için (değil ) +#;-#gösterecektir .++0

"#" Özel Tanımlayıcı ( https://msdn.microsoft.com/en-us/library/0c899ak8.aspx adresinde )

Dizede tek basamak olsa bile bu belirleyicinin hiçbir zaman anlamlı bir basamak olmayan bir sıfır görüntülemediğini unutmayın. Yalnızca görüntülenmekte olan sayıdaki önemli bir rakamsa sıfır görüntüler.

Ayrıca, herhangi bir ondalık duyarlığa ihtiyacınız varsa, bunu şöyle belirtmeniz gerektiğini lütfen unutmayın:

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

veya her zaman görünmesi için sıfır yoksa, şöyle:

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

1

Herhangi bir türün sayısal ifadesi için:

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

Üç vaka için üç parça kullanın: pozitif; negatif; sıfır

Örneğin diğer yönleri:

  • Sıfır imzalı değil. "Sıfır" gibi bir şey olarak gösterilmesini sağlayabilirsiniz.

  • Birden küçük mutlak değerler ondalık noktadan önce 0 önde gelir. Zevkinize göre ayarlayın.

  • Basamak sayısı en büyük ve en küçük mutlak ondalık değerler içindir. Zevkinize göre ayarlayın.

  • Ondalık nokta karakteri kültüre özgüdür. .NET yerine geçer.

  • Gruplama ayırıcılar isteğe bağlıdır. Karakter kültüre özgüdür. .NET yerine geçer. (Konumlar da kültüre özgüdür, ancak bu yalnızca biçim dizeniz tarafından kontrol edilir.) Biçim için özel karakterler (. # 0 dahil) dışında başka bir karakter de kullanırsınız.


0

Yorum yapamam bu yüzden burada bir cevap yap (fındık itibar sistemi ....)

UTC String TimeFormat Oluşturmak için number.ToString ("+ 0; - #") işlevini çok iyi kullanabilirsiniz

Burada PowerShell kodunda gösterildi

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

Teşekkürler @gcores https://stackoverflow.com/users/40256/gcores

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.