Esiste un modo in cui posso specificare una stringa di formato numerico standard o personalizzata per generare sempre il segno, sia esso + ve o -ve (anche se cosa dovrebbe fare per zero, non sono sicuro!)
Esiste un modo in cui posso specificare una stringa di formato numerico standard o personalizzata per generare sempre il segno, sia esso + ve o -ve (anche se cosa dovrebbe fare per zero, non sono sicuro!)
Risposte:
Si, puoi. C'è una formattazione condizionale. Vedi Formattazione condizionale in MSDN
per esempio:
string MyString = number.ToString("+0;-#");
Dove ogni sezione separata da un punto e virgola rappresenta numeri positivi e negativi
o:
string MyString = number.ToString("+#;-#;0");
se non vuoi che lo zero abbia un segno più.
+#;-#
, per il valore 0 ottengo solo "+", senza alcuna reale 0. per me voglio 0 apparire come "0", così funziona: +#;-#;+0
.
''
farà grandi cose! Guarda questo Changes.ToString("'('#' ▲)';'('#' ▼)';''")
:! Mi ha fatto risparmiare un sacco di tempo e centinaia di if
dichiarazioni! :)
+0;-#
invece di +#;-#;+0
Questa risposta è stata davvero fuorviante per me.
Puoi anche usare stringhe di formato in string.Format (); la stringa di formato è separata dall'indice con due punti (':')
var f = string.Format("{0}, Force sign {0:+#;-#;+0}, No sign for zero {0:+#;-#;0}", number);
Per il numero {+1, -1, 0} questo dà:
1, Forza segno +1, Nessun segno per zero +1
-1, Forza segno -1, Nessun segno per zero -1
0, Forza segno +0, Nessun segno per zero 0
Puoi anche usare una stringa interpolata invece di string.Format
ottenere lo stesso risultato:
var f = $"{number}, Force sign {number:+#;-#;+0}, No sign for zero {number:+#;-#;0}";
+#;-#
formato per il valore 0
+0;-#
. :)
+#;-#;+0
rispetto +#;-#
a ciò, poiché questo rende più chiaro che 0 sarà formattato come +0
Contrariamente alle altre risposte sembra che se si desidera ottenere +1, -1, +0 (per gli argomenti 1, -1, 0) è necessario utilizzare il formato:
String.Format("{0:+#;-#;+0}", 0)); // output: +0
o
String.Format("{0:+0;-#}", 0)); // output: +0
Se si utilizza solo +#;-#
, verrà visualizzato solo +
(non +0
) per 0.
Lo identificatore personalizzato "#" (all'indirizzo https://msdn.microsoft.com/en-us/library/0c899ak8.aspx )
Si noti che questo identificatore non visualizza mai uno zero che non sia una cifra significativa, anche se zero è l'unica cifra nella stringa. Verrà visualizzato zero solo se si tratta di una cifra significativa nel numero visualizzato.
Inoltre, tieni presente che se hai bisogno di una precisione decimale devi specificarla in questo modo:
String.Format("{0:+0.##;-#.##}", 0)); // output: +0
o, se non vuoi che gli zeri vengano visualizzati sempre, in questo modo:
String.Format("{0:+0.00;-#.00}", 0)); // output: +0.00
Per un'espressione numerica di qualsiasi tipo:
+###,###,###,###,###,###,###,###,###,##0.###,###,###,###,###,###,###,###,###,###;-###,###,###,###,###,###,###,###,###,##0.###,###,###,###,###,###,###,###,###,###;0
Utilizzare tre parti per tre casi: positivo; negativo; zero
Altri aspetti dell'esempio:
Zero non è firmato. Potresti farlo mostrare come qualsiasi cosa, come "zero".
I valori assoluti inferiori a uno hanno uno 0 iniziale prima del punto decimale. Regola a piacere.
Il numero di cifre indica i valori decimali assoluti più grandi e più piccoli. Regola a piacere.
Il carattere del punto decimale è specifico della cultura. Sostituti .NET.
I separatori di raggruppamento sono facoltativi. Il personaggio è specifico per la cultura. Sostituti .NET. (Le posizioni sono anche specifiche della cultura ma sono controllate solo dalla stringa del formato.) Puoi anche usare qualsiasi altro carattere tranne i caratteri speciali per Formato (che includono, # 0).
Non posso commentare, quindi faccio una risposta qui (sistema di reputazione folle ....)
Puoi usare number.ToString ("+ 0; - #") molto bene per produrre la stringa di tempo UTC
Qui mostrato nel codice di PowerShell
"$([System.DateTime]::Now.ToString('HH:mm:ss.fff'))$($([System.TimeZoneInfo]::Local.GetUtcOffset([System.DateTime]::Now).TotalMinutes.ToString('+0;-#')))"
Grazie @gcores https://stackoverflow.com/users/40256/gcores