2011-08-22 15 views
9

Este es mi código:añadir 0 antes del número si <10

string Unreadz = "0"; 
while (true) 
{ 
    Unreadz = CheckMail();  
    if (!Unreadz.Equals("0")) port.Write("m"); 
    else port.Write("n"); 
} 

Si Unreadz es menor que 10, quiero añadir un 0 antes de que, antes de port.write.

Esto es lo que he intentado:

if (Unreadz < 10) port.Write("0" + Unreadz); 
else port.Write("" + Unreadz); 

pero no funciona porque Unreadz es una cadena.

+0

uso del Unreadz.length si está interesado en la longitud o analizar en un número entero como Int32.Parse (unreadz) si desea que el valor numérico almacenado dentro de la cadena –

Respuesta

2

Si su garantizó que el valor devuelto será un entero representado como una cadena, entonces se puede convertir en un número y luego realizar la comparación.

if (Convert.ToInt32(Unreadz) < 10) port.Write("0" + Unreadz); 
else port.Write("" + Unreadz); 
+1

funcionó mejor que el respuesta mejor clasificada ... tal vez debido a mi inexperiencia ... ¡pero gracias! – Csharpz

+0

@Csharpz se preocupan por explicar cómo funcionó mejor? ¿Recibió algún error usando el modo de una línea? –

+0

ha pasado un tiempo pero, según recuerdo, ¡funcionó muy bien! :) – Csharpz

5

tratar

if (Convert.ToInt32(Unreadz) < 10) port.Write(string.format("{0}{1}", "0", Unreadz); 

Alternativamente,

if (Unreadz.length == 1) ... 
20

esto debería funcionar:

port.Write(Unreadz.ToString().PadLeft(2, '0')); 
0

Si Unreadz es una cadena, a continuación, para compararlo, que tendría que convertirlo a un int.

si (Unreadz < 10) a si (Convert.ToInt16 (Unreadz) < 10)

4

En primer lugar, Unreadz realmente debería ser un entero, no una cadena

Entonces se puede escribir :

 int Unreadz; 
     while (true) 
     { 
      Unreadz = CheckMail(); //Change this to return an int 

      string formattedNumber = String.Format("{0:##}", Unreadz.ToString()); 
      port.Write(formattedNumber); 
     } 
+0

Ni siquiera necesita el '.ToString()' - String.Format hará esto por usted. – GalacticCowboy

0

tratar de definir int unreadz y luego usar port.Write(string.Format("{0:00}", unreadz)

1

Es necesario para convertir la cadena en un número para hacer la prueba de menos de 10:

// this will throw an exception if the string does not contain a number 
int unreadzNumber = int.Parse(Unreadz); 

Si está seguro de que la cadena contiene exactamente un dígito y nada más, puede simplemente probar si tiene longitud 1:

bool isLessThanTen = Unreadz.Length == 1; 

Usted puede hacer el formato en una variedad de maneras diferentes:

// 1: just stick a zero before it 
string formatted = string.Format("0{0}", unreadzNumber); 
// 2: use a special format string to use at least two digits 
string formatted = string.Format("{0:00}", unreadzNumber); 
// 3: pad the string with zeros to the left 
string formatted = Unreadz.PadLeft(2, '0'); 
// 4: manually concatenate with "0" 
string formatted = "0" + Unreadz; 
// and probably others 

Yo prefiero la segunda, ya que hace que el formato más claro y más fácil de mantener y no requiere la comparación.

Así, se obtiene:

string Unreadz = "0"; 
    while (true) 
    { 
     Unreadz = CheckMail();  
     int unreadzNumber = int.Parse(Unreadz); 
     port.Write(string.Format("{0:00}", unreadzNumber)); 
    } 
2

Si usted tiene un entero, el método ToString le ayudará a:

int i = 5; 
string formatted = i.ToString("00"); 

formateado habrá puede hacer esto por el mayor número '0' como desee, y también ponga caracteres adicionales si su cadena final es diferente:

int minutes = 2, seconds = 3; 
int timeSum = minutes * 100 + seconds; 
string time = timeSum.ToString("00m00s"); 

tiempo será 02m03s

Cuestiones relacionadas