¿Hay alguna manera de que pueda especificar una cadena de formato numérico estándar o personalizado para que siempre salga el signo, ya sea + ve o -ve (aunque no estoy seguro de lo que debería hacer para cero)
¿Hay alguna manera de que pueda especificar una cadena de formato numérico estándar o personalizado para que siempre salga el signo, ya sea + ve o -ve (aunque no estoy seguro de lo que debería hacer para cero)
Respuestas:
Sí tu puedes. Hay formato condicional. Ver Formato condicional en MSDN
p.ej:
string MyString = number.ToString("+0;-#");
Donde cada sección separada por un punto y coma representa números positivos y negativos
o:
string MyString = number.ToString("+#;-#;0");
si no quieres que el cero tenga un signo más.
+#;-#
, para el valor 0 consigo sólo "+", sin real 0. para mí quiero 0 a aparecer como "0", por lo que esta obra: +#;-#;+0
.
''
hará grandes cosas! Mira esto Changes.ToString("'('#' ▲)';'('#' ▼)';''")
:! ¡Me ahorró mucho tiempo y cientos de if
declaraciones! :)
+0;-#
lugar de +#;-#;+0
Esta respuesta fue realmente engañosa para mí.
También puede usar cadenas de formato en string.Format (); la cadena de formato se separa del índice con dos puntos (':')
var f = string.Format("{0}, Force sign {0:+#;-#;+0}, No sign for zero {0:+#;-#;0}", number);
Para el número {+1, -1, 0} esto da:
1, signo de fuerza +1, sin signo de cero +1
-1, signo de fuerza -1, sin signo de cero -1
0, signo de fuerza +0, sin signo de cero 0
También puede usar una cadena interpolada en lugar de string.Format
obtener el mismo resultado:
var f = $"{number}, Force sign {number:+#;-#;+0}, No sign for zero {number:+#;-#;0}";
+#;-#
formato para el valor 0
+0;-#
. :)
+#;-#;+0
más +#;-#
ya que esto hace que sea más claro que 0 se indicará como 0
Al contrario de las otras respuestas, parece que si desea obtener +1, -1, +0 (para los argumentos 1, -1, 0) debe usar el formato:
String.Format("{0:+#;-#;+0}", 0)); // output: +0
o
String.Format("{0:+0;-#}", 0)); // output: +0
Si usa solo +#;-#
, se mostrará solo +
(no +0
) para 0.
El especificador personalizado "#" (en https://msdn.microsoft.com/en-us/library/0c899ak8.aspx )
Tenga en cuenta que este especificador nunca muestra un cero que no sea un dígito significativo, incluso si cero es el único dígito en la cadena. Mostrará cero solo si es un dígito significativo en el número que se está mostrando.
Además, tenga en cuenta que si necesita alguna precisión decimal, debe especificarla así:
String.Format("{0:+0.##;-#.##}", 0)); // output: +0
o, si no quieres que siempre aparezcan ceros, así:
String.Format("{0:+0.00;-#.00}", 0)); // output: +0.00
Para una expresión numérica de cualquier tipo:
+###,###,###,###,###,###,###,###,###,##0.###,###,###,###,###,###,###,###,###,###;-###,###,###,###,###,###,###,###,###,##0.###,###,###,###,###,###,###,###,###,###;0
Use tres partes para tres casos: positivo; negativo; cero
Otros aspectos del ejemplo:
Cero no está firmado. Puede hacer que se muestre como cualquier cosa, como "cero".
Los valores absolutos menores que uno tienen un 0 inicial antes del punto decimal. Ajustar al gusto.
El número de dígitos es para los valores decimales absolutos más grandes y más pequeños. Ajustar al gusto.
El carácter de punto decimal es específico de la cultura. .NET sustitutos.
Los separadores de agrupación son opcionales. El personaje es culturalmente específico. .NET sustitutos. (Las posiciones también son específicas de la cultura, pero eso solo está controlado por su cadena de formato). También usa cualquier otro carácter excepto los caracteres especiales para Formato (que incluyen,. # 0).
No puedo comentar, así que respondo aquí (sistema de reputación loco ...)
Puede usar number.ToString ("+ 0; - #") muy bien para producir el formato de tiempo de cadena UTC
Aquí se muestra en el código de PowerShell
"$([System.DateTime]::Now.ToString('HH:mm:ss.fff'))$($([System.TimeZoneInfo]::Local.GetUtcOffset([System.DateTime]::Now).TotalMinutes.ToString('+0;-#')))"
Gracias @gcores https://stackoverflow.com/users/40256/gcores