2010-02-01 15 views
7

¿Hay alguna manera (en .NET) de eliminación de ceros a la derecha de un número cuando se utiliza .ToString("..."), pero para mostrar a 2 decimales si el número no es un número entero:Viendo ceros excepto cuando toda una serie

  1. (12345,00) .ToString (...) debe mostrar como 12345
  2. (12345,10) .ToString (...) debe mostrar como 12345,10
  3. (12345,12) .ToString (...) debe mostrar como 12345.12

Es Hay 1 cadena de formato numérico que funcionará en todos estos escenarios?

.ToString("#.##") obras casi, pero no muestra el detrás de 0 para el escenario 2 ...

Además, otras culturas no son un problema, sólo quiero un punto decimal (no una coma, etc.)

+0

Probar '0. # 0'?No he intentado esto y no estoy seguro de cómo reaccionará en la situación de números enteros. –

+0

No hay un solo formato para esto. Además, ¿qué quieres que 12345.001 muestre como? 12345.00 (redondeado a 2 decimales porque no es un número entero) o 12345 (el número redondeado a 2 decimales es un número entero, ¿por lo que elimina los ceros finales)? – Joe

+0

Para números enteros esto se muestra como 12345.00 –

Respuesta

7

¿Algo en esta línea?

  if (number % 1 == 0) 
       Console.WriteLine(string.Format("{0:0}", number)); 
      else 
       Console.WriteLine(string.Format("{0:0.00}", number)); 

EDITAR

Hay un pequeño error en el código aunque :) 1.001 se imprimirá como "1,00" ... esto no puede ser lo que quiera, si necesita imprimir 1.001 como " 1 "necesitará cambiar la prueba if (...) para verificar si hay tolerancia finita. Como esta pregunta es más sobre el formato, dejaré la respuesta sin cambios, pero en el código de producción es posible que desee considerar este tipo de problema.

+0

Para un código ligeramente más legible, preferiría 'Formato de cadena = (número% 1) == 0? "{0: 0}": "{0: 0.00}"; ' –

+0

Sí, sí fui con esa iniciativa, pero pensé que el" largo camino "era más claro en el contexto de responder la pregunta. Probablemente usaría tu estilo en código real. –

+0

No es exactamente lo que estaba buscando, ya que quería enlazar directamente al número en una página de asp.net, y usar la cadena de formato para determinar cómo se muestra. Sin embargo, he usado este enfoque para agregar otra variable a mis enlaces y, en su lugar, me he vinculado a eso (como una cadena). –

0

No puedo decir que he encontrado una sola máscara que hará eso. Me gustaría utilizar

string output = (value % 1 > 0) ? String.Format("{0:0.00}", value) : String.Format("{0:0.##}", value); 
1

No en un formato pero cabe en una sola línea:

double a = 1.0; 
string format = string.Format((a == (int)a) ? "{0:0}" : "{0:0.00}", a); 
0

Creo que se puede hacer su propio método para producir esa pantalla, ya que es condicional a si es o no es un número entero.

public static class Extensions 
{ 
    public static string ToCustomString(this decimal d) 
    { 
     int i = (int)d; 
     if (i == d) 
      return i.ToString(); 

     return d.ToString("#.00"); 
    } 
} 
0

Si desea utilizarlo para mostrar la moneda, se puede utilizar después de

float fVal = 1234.20f; 
String strVal = fVal.Tostring("c"); 
0

Se puede escribir un método de extensión como este para hacer el formato para usted:

public static string FormatNumberString(this double input) 
    { 
     int temp; 
     string inputString = input.ToString(); 
     return Int32.TryParse(inputString, out temp) ? inputString : input.ToString("0.00"); 
    } 
0

Si estabas buscando hacer esto en ASP MVC Razor, podrías intentarlo

@string.Format(item.DecimalNumber % 1 == 0 ? "{0:0}" : "{0:0.00}", item.DecimalNumber) 

Esto se comportan de esta manera:

Valor: 2,5 -> Pantalla: 2.50

Valor: 5 -> Pantalla: 5

Valor: 2,45 -> Pantalla: 2.45

2

Suciedad:

string.Format("{0:0.00}", number).Replace(".00","") 
+0

Este enfoque devuelve 110 para 11.0 – DoIt

Cuestiones relacionadas