none
Deleted RRS feed

Respuestas

  • Lo de los 7 caracteres es porque has usado un float y Convert.ToSingle. El float no tiene más precisión que esa. Si necesitas más dígitos, prueba a cambiarlo por un double, y usar Convert.ToDouble.

    >¿Cual sería la manera correcta de manejar las conversiones de dinero [...]

    Si es dinero, suprime del programa todos los sitios donde uses float o double, y cámbialo todo por el tipo decimal (y Convert.ToDecimal, etc). Este tipo es exacto, mientras que float y double son tipos inexactos y pueden darte problemas con los redondeos. Por ejemplo, si guardas el valor 1234.56 en un tipo System.Decimal, siempre vale 1234.56. Pero si lo guardas en float o double, es posible que el sistema te tome 1234.560000001 o 1234.55999999998, por ejemplo (no sé si sucede con estos valores concretos, pero existen números con los que puedes tener estos problemas). Con el Decimal te evitas los problemas que puedan ocurrir en el sentido de que pierdas un céntimo al redondear estas cifras.

    martes, 7 de abril de 2020 6:32
    Moderador

Todas las respuestas

  • Lo de los 7 caracteres es porque has usado un float y Convert.ToSingle. El float no tiene más precisión que esa. Si necesitas más dígitos, prueba a cambiarlo por un double, y usar Convert.ToDouble.

    >¿Cual sería la manera correcta de manejar las conversiones de dinero [...]

    Si es dinero, suprime del programa todos los sitios donde uses float o double, y cámbialo todo por el tipo decimal (y Convert.ToDecimal, etc). Este tipo es exacto, mientras que float y double son tipos inexactos y pueden darte problemas con los redondeos. Por ejemplo, si guardas el valor 1234.56 en un tipo System.Decimal, siempre vale 1234.56. Pero si lo guardas en float o double, es posible que el sistema te tome 1234.560000001 o 1234.55999999998, por ejemplo (no sé si sucede con estos valores concretos, pero existen números con los que puedes tener estos problemas). Con el Decimal te evitas los problemas que puedan ocurrir en el sentido de que pierdas un céntimo al redondear estas cifras.

    martes, 7 de abril de 2020 6:32
    Moderador
  • hola

    Creo que estas superando la precision del tipo de dato, si usas

    using System;
    using System.Globalization;
    					
    public class Program
    {
    	public static void Main()
    	{
               float DINNNN = Convert.ToSingle("123456.10", new CultureInfo("en-US"));
               Console.WriteLine(DINNNN);
    	}
    }

    veras que muestra "123456.1" pero si agregas un digito mas cambia

    Single Estructura

    Menciona:

    Un valor Single tiene hasta 7 dígitos decimales de precisión, aunque se mantiene internamente un máximo de 9 dígitos

    Intenta usar double o decimal

    double DINNNN = Convert.ToDouble("123456789.10", new CultureInfo("en-US"));

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    martes, 7 de abril de 2020 11:57
  • Hola

     

     

    Gracias por levantar tu consulta en los foros de MSDN. Cerraremos el Hilo, por ende si tiene alguna otra consulta por favor genera otra consulta para que la comunidad de foros te pueda asesorar.

     

    Siempre es un placer atender tus consultas!

     

    Gracias por usar los foros de MSDN.

     

    Oscar Navarro

     ____

     

    Por favor recuerde "Marcar como respuesta" las respuestas que hayan resuelto su problema, es una forma común de reconocer a aquellos que han ayudado, y hace que sea más fácil para los otros visitantes encontrar la solución más tarde.

     

    Microsoft ofrece este servicio de forma gratuita, con la finalidad de ayudar a los usuarios y la ampliación de la base de datos de conocimientos relacionados con los productos y tecnologías de Microsoft. 

     

    Este contenido es proporcionado "tal cual" y no implica ninguna responsabilidad de parte de Microsoft.

    jueves, 9 de abril de 2020 16:33
    Moderador