El visual .net no sabe sumar???

28/11/2005 - 09:44 por aydai | Informe spam
Hola a todos!!
Vereis, tengo un problema que no se a que puede ser debido y me estoy
volviendo loco.

Tengo este simple programita de ejemplo:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button1.Click
Dim a, b As Double
Dim c As Double
a = CDbl(TextBox1.Text)
b = CDbl(TextBox2.Text)
c = a + b
TextBox3.Text = CStr(c)
End Sub
Si al ejecutarlo, el valor del textbox1 es 10 y el valor del textbox2 es
4,14 por ejemplo el resultado en textbox3 es 14,14, sin embargo, si poneis
puntos de ruptura y lo ejecutais paso a paso, el valor de la variable c es
igual a 14,140000...1.
Estube haciendo pruebas y usando variables single en vez de doubles, se me
solucionaba el problema, es decir el resultado de sumar 4,14 + 10 = 14,14.
El tema es que estoy implementando un programa de contabilidad en el cual
hacer sumas y restas es algo muy habitual, y cambie el codigo de una funcion
para saber si el asiento esta descuadrado y en vez de usar doubles use
singles, al principio todo bien, pero llego un momento en el que tambien me
volvio a ocurrir lo mismo.
Queria saber si a alguien le a ocurrido lo mismo, o si alguien sabe por que
se produce este error. Desde luego.

Un saludo y gracias a todos.
 

Leer las respuestas

#1 A.Poblacion
28/11/2005 - 13:06 | Informe spam
"" wrote in message
news:uh7r3f$
Hola a todos!!
Vereis, tengo un problema que no se a que puede ser debido y me estoy
volviendo loco.

Tengo este simple programita de ejemplo:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button1.Click
Dim a, b As Double
Dim c As Double
a = CDbl(TextBox1.Text)
b = CDbl(TextBox2.Text)
c = a + b
TextBox3.Text = CStr(c)
End Sub
Si al ejecutarlo, el valor del textbox1 es 10 y el valor del textbox2 es
4,14 por ejemplo el resultado en textbox3 es 14,14, sin embargo, si poneis
puntos de ruptura y lo ejecutais paso a paso, el valor de la variable c es
igual a 14,140000...1.
Estube haciendo pruebas y usando variables single en vez de doubles, se me
solucionaba el problema, es decir el resultado de sumar 4,14 + 10 = 14,14.
El tema es que estoy implementando un programa de contabilidad en el cual
hacer sumas y restas es algo muy habitual, y cambie el codigo de una


funcion
para saber si el asiento esta descuadrado y en vez de usar doubles use
singles, al principio todo bien, pero llego un momento en el que tambien


me
volvio a ocurrir lo mismo.
Queria saber si a alguien le a ocurrido lo mismo, o si alguien sabe por


que
se produce este error. Desde luego.




No utilices ni double ni single. Los dos te darán problemas de
redondeo, dependiendo de los valores que les metas, porque ambos tipos son
inexactos al manejar valores decimales: los convierten a una mantisa en
binario más un exponente, y la conversión de base 10 a base 2 puede no ser
exacta para ciertos valores (que tienen un número finito de decimales en
base 10 pero un número infinito en base 2).
Para estas cosas utiliza el tipo Decimal, que sí que es exacto.

Preguntas similares