1

Buenas tardes.

Estoy trabajando (en VB .Net 4.6) con un facturador de ventas y tengo el siguiente inconveniente, al querer realizar el cálculo: 100.02-100=0.02, obtengo:
Caso 1: 100.02-100 -> 0.019999999999996021 (Double) X
Caso 2: CDec(100.02-100) -> 0.019999999999996 (Decimal) X
Caso 3: cdec(100.02)-cdec(100) -> 0.02 (Decimal)

Si uso tipos de datos System.Single tengo estas diferencias, pero si uso System.Decimal es matar un mosquito con un cañon. Sólo utilizo 2 decimales significativos.

¿Es un 'error' de esta versión del framework? ¿Sí o sí debo utilizar tipos de datos System.Decimal para evitar las diferencias al operar con System.Single y System.Double?

Carlos Muñoz
  • 12,864
  • 2
  • 42
  • 62
Claudio
  • 11
  • 2

2 Answers2

1

La respuesta a tu problema la puedes encontrar en este otro hilo.

Para evitar problemas con los redondeos lo más recomendable en .NET es usar el tipo Decimal.

eferion
  • 49,291
  • 5
  • 30
  • 72
1

No es un error de framework sino tienes que ver con la precision decimal del tipo de datos

Si necesitas realizar un calculo y solo obtener una determinada precision en decimales usa el

Math.Round()

De esta forma al calculo le indicas la cantidad de decimales que necesitas

Dim result As Decimal = Math.Round(CDec(100.02-100), 2)
Leandro Tuttini
  • 35,380
  • 3
  • 13
  • 40