Ceros a la derecha.

(1/1)

Meta:
Hola:

A la salida del programa en C# me muestra estos valores.

52.21

51.63

Como puedes ver arriba, ninguno termina en 0.

Si fuese 52.2 y 51.6

En el programa quiero que se añada un 0 a la derecha y se me queda con dos decimales, por ejemplo, quedaría así:

52.20

51.60

Solo si muestra solo un decimal, si muestra 52.21, tiene que ser 52.21, no 52.210 que sería tres decimales.

Tachikomaia:
Se me ocurre:

Método 1:
Código:

NumSinDecimales = (función que los quita, en algunos lenguajes es floor).
Si NumOriginal > NumSinDecimales
   // NumOriginal es decimal.
   LargodelNumOriginal = (función que mide el largo, puede requerir convertir el número en cadena o crear otra variable que sea el número pero en cadena).
   LargodelNumsinDecimales = (lo mismo pero aplicado a NumsinDecimales).
   Si LargodelNumOriginal - LargodelNumsinDecimales == 2 (creo)
      Salida = NumOriginal + "0" (en algunos lenguajes puede requerir convertir el número en cadena, la idea es agregarle un 0).


Método 2:
Sería un código que mire caracter por caracter. Si encuentra un "." comenzaría a contar cuántos hay luego. Si sólo hay 1, agrega un 0. No es tan fácil como para mostrarte un ejemplo, pero tampoco es tan, tan complicado.

Método 3:
Si el número es decimal, multiplícalo *10. Si ya no lo es, divídelo entre 10 y agregale un 0 como ya te expliqué.

Meta:
Hola:

Muy engorroso lo vi, me olía que hay algo más sencillo y es esto.

Código
string salida = "51.2";
 
Console.Write(salida.PadRight(5, '0'));

Ver PadRight

Muchas gracias.

elektrostudios2:
Cita de: Meta en 18 Noviembre 2023, 23:42 pm

me olía que hay algo más sencillo y es esto.

Código
string salida = "51.2";
Console.Write(salida.PadRight(5, '0'));


En realidad, al trabajar con valores numéricos, lo más recomendable (e igual de sencillo) es aplicar un formato adecuado directamente al valor numérico mediante la funcionalidad provista para ello. El uso de funciones de relleno (padding), aunque te de el resultado esperado, se reserva para alinear cadenas de texto.

Dicho esto, y para empezar, hay que tener en cuenta dos cosas en ese código que has compartido:

1. Estás asignando valores numéricos como cadenas de texto.

2. Estás usando el delimitador de decimales americano en las cadenas de texto, probablemente dentro de un contexto en español.

Teniendo esas dos cosas en cuenta, la solución adecuada a tu entorno se vería tal que así:

Código
Thread.CurrentThread.CurrentCulture = CultureInfo.GetCultureInfo("en");
 
string value = "51.2";
string valueFormatted = $"{double.Parse(value):N2}";
Console.WriteLine(valueFormatted);

O expresado de forma ligeramente distinta:

Código
string value = "51.2";
string valueFormatted = string.Format(CultureInfo.GetCultureInfo("en"), "{0:N2}", double.Parse(value));
Console.WriteLine(valueFormatted);

Aténtamente,
Elektro.

Meta:
Muchas gracias, es bueno saberlo.

Navegación

[0] Índice de Mensajes