Principales respuestas
Deleted

Pregunta
-
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.
- Editado Alberto PoblacionMVP, Moderator martes, 7 de abril de 2020 12:02
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.
- Editado Alberto PoblacionMVP, Moderator martes, 7 de abril de 2020 12:02
-
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
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- Propuesto como respuesta Óscar NavarroModerator martes, 7 de abril de 2020 13:07
-
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.