Foro de elhacker.net

Programación => .NET (C#, VB.NET, ASP) => Mensaje iniciado por: Meta en 17 Noviembre 2023, 01:27 am



Título: Ceros a la derecha.
Publicado por: Meta en 17 Noviembre 2023, 01:27 am
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.



Título: Re: Ceros a la derecha.
Publicado por: Tachikomaia en 17 Noviembre 2023, 07:33 am
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é.


Título: Re: Ceros a la derecha.
Publicado por: Meta en 18 Noviembre 2023, 23:42 pm
Hola:

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

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

Ver PadRight (https://learn.microsoft.com/es-es/dotnet/api/system.string.padright?view=netframework-4.8&devlangs=csharp&f1url=%3FappId%3DDev16IDEF1%26l%3DES-ES%26k%3Dk(System.String.PadRight)%3Bk(TargetFrameworkMoniker-.NETFramework%2CVersion%253Dv4.8)%3Bk(DevLang-csharp)%26rd%3Dtrue)

Muchas gracias.


Título: Re: Ceros a la derecha.
Publicado por: elektrostudios2 en 21 Febrero 2024, 09:44 am
me olía que hay algo más sencillo y es esto.

Código
  1. string salida = "51.2";
  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
  1. Thread.CurrentThread.CurrentCulture = CultureInfo.GetCultureInfo("en");
  2.  
  3. string value = "51.2";
  4. string valueFormatted = $"{double.Parse(value):N2}";
  5. Console.WriteLine(valueFormatted);

O expresado de forma ligeramente distinta:

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

Aténtamente,
Elektro.


Título: Re: Ceros a la derecha.
Publicado por: Meta en 2 Marzo 2024, 11:01 am
Muchas gracias, es bueno saberlo.