Czy jest jakiś sposób na określenie standardowego lub niestandardowego ciągu formatu liczbowego, aby zawsze wyświetlał znak, czy to + ve czy -ve (chociaż nie powinienem wiedzieć, co powinien zrobić dla zera!)
Czy jest jakiś sposób na określenie standardowego lub niestandardowego ciągu formatu liczbowego, aby zawsze wyświetlał znak, czy to + ve czy -ve (chociaż nie powinienem wiedzieć, co powinien zrobić dla zera!)
Odpowiedzi:
Tak, możesz. Istnieje formatowanie warunkowe. Zobacz Formatowanie warunkowe w MSDN
na przykład:
string MyString = number.ToString("+0;-#");
Gdzie każda sekcja oddzielona średnikiem reprezentuje liczby dodatnie i ujemne
lub:
string MyString = number.ToString("+#;-#;0");
jeśli nie chcesz, aby zero miało znak plus.
+#;-#
, dla wartości 0 I dostać tylko „+”, bez rzeczywistego 0. Dla mnie Chcę 0 pojawiać się jako „+0”, tak to działa: +#;-#;+0
.
''
robi świetne rzeczy! Spójrz na to Changes.ToString("'('#' ▲)';'('#' ▼)';''")
:! Zaoszczędziło mi to dużo czasu i setki if
wypowiedzi! :)
+0;-#
zamiast. +#;-#;+0
Ta odpowiedź była dla mnie bardzo myląca.
Możesz także użyć ciągów formatujących w string.Format (); ciąg formatu jest oddzielony od indeksu dwukropkiem („:”)
var f = string.Format("{0}, Force sign {0:+#;-#;+0}, No sign for zero {0:+#;-#;0}", number);
Dla liczby {+1, -1, 0} daje to:
1, Znak siły +1, Brak znaku dla zera +1
-1, Znak siły -1, Brak znaku dla zera -1
0, Znak siły +0, Brak znaku dla zera 0
Możesz również użyć interpolowanego ciągu zamiast string.Format
uzyskać ten sam wynik:
var f = $"{number}, Force sign {number:+#;-#;+0}, No sign for zero {number:+#;-#;0}";
+#;-#
formatu dla wartości 0
+0;-#
. :)
+#;-#;+0
się +#;-#
jak to czyni go bardziej zrozumiałym, że 0 zostanie sformatowana jako +0
W przeciwieństwie do innych odpowiedzi wydaje się, że jeśli chcesz uzyskać +1, -1, +0 (dla argumentów 1, -1, 0), musisz użyć formatu:
String.Format("{0:+#;-#;+0}", 0)); // output: +0
lub
String.Format("{0:+0;-#}", 0)); // output: +0
Jeśli użyjesz tylko +#;-#
, wyświetli się +
(nie +0
) dla 0.
Niestandardowy specyfikator „#” (na https://msdn.microsoft.com/en-us/library/0c899ak8.aspx )
Zauważ, że ten specyfikator nigdy nie wyświetla zera, który nie jest cyfrą znaczącą, nawet jeśli zero jest jedyną cyfrą w ciągu. Wyświetli zero tylko wtedy, gdy jest to cyfra znacząca w wyświetlanej liczbie.
Pamiętaj również, że jeśli potrzebujesz jakiejkolwiek precyzji dziesiętnej, musisz ją tak określić:
String.Format("{0:+0.##;-#.##}", 0)); // output: +0
lub, jeśli nie chcesz zer zawsze się wyświetlać, tak:
String.Format("{0:+0.00;-#.00}", 0)); // output: +0.00
Dla wyrażenia liczbowego dowolnego typu:
+###,###,###,###,###,###,###,###,###,##0.###,###,###,###,###,###,###,###,###,###;-###,###,###,###,###,###,###,###,###,##0.###,###,###,###,###,###,###,###,###,###;0
Użyj trzech części dla trzech przypadków: pozytywny; negatywny; zero
Inne aspekty przykładu:
Zero nie jest podpisane. Możesz wyświetlać go jako cokolwiek, na przykład „zero”.
Wartości bezwzględne mniejsze niż jeden mają wiodące 0 przed kropką dziesiętną. Dostosuj się do smaku.
Liczba cyfr odpowiada największej i najmniejszej bezwzględnej wartości dziesiętnej. Dostosuj się do smaku.
Znak dziesiętny jest zależny od kultury. .NET zastępuje.
Separatory grupowania są opcjonalne. Postać jest specyficzna dla kultury. .NET zastępuje. (Pozycje są również specyficzne dla kultury, ale jest kontrolowane tylko przez ciąg formatu.) Możesz również użyć dowolnego innego znaku oprócz znaków specjalnych dla Format (które obejmują. # 0).
Nie mogę komentować, więc odpowiem tutaj (system reputacji orzechów ....)
Możesz bardzo dobrze użyć number.ToString ("+ 0; - #"), aby utworzyć format czasu UTC String
Tutaj pokazano w kodzie PowerShell
"$([System.DateTime]::Now.ToString('HH:mm:ss.fff'))$($([System.TimeZoneInfo]::Local.GetUtcOffset([System.DateTime]::Now).TotalMinutes.ToString('+0;-#')))"
Dziękuję @gcores https://stackoverflow.com/users/40256/gcores