Programación General > Visual Basic 6.0 e inferiores

 0.99 \ 1 = 1. WTF?

(1/1)

vemv91:
Hola, este es mi primer post.

Vamos a ver... escribo un programita con un label y un botón. El botón contiene este código para el evento click:

Label1.Text = 0.99  1

Esta división *entera* me da como resultado en el label 1. Me parece que este operador redondea (!), porque esto no sucede con 0.4  1 por ejemplo. Hay algo que debería saber?

Gracias por adelantado  :beer:

Shiquilla:
Buenas tardes, eso es porque al dividir en vb la barra "" redondea al alza, es decir, si el resultado de la división es superior > 0.5 lo redondea al inmediato superior, si es inferior, al inmediato inferior, al final sólo devuelve un entero. Te paso el código de estas funciones que están implementadas en SQL Server pero en VB6 no. Te paso el código de ambas para que pongas la que quieras.


--- Código: Visual Basic ---'Devuelve el entero más pequeño no menor que X.'Ejemplo: Ceiling(1.23) = 2, Ceiling(-1.23) = -1Private Function Ceiling(ByVal X As Double) As Long   Ceiling = -Int(X * (-1))End Function 'Devuelve el entero más grande no mayor que X.'Ejemplo: Floor(1.23) = 1, Floor(-1.23) = -2Private Function Floor(ByVal X As Double) As Long   Floor = (-Int(X) * (-1))End Function 
Saludos,

vemv91:
Qué tal chiquilla ;)

Bueno, probablemente el error es mío por esperar que un operador se comporte del modo que a mí me parece razonable.
Porque lo que quiero es ciertamente particular: una división "con resto" incluso entre dos números decimales, tipo 1.45 entre 0.105. Me temo que el código que has adjuntado sirve más bien para redondear...

El código que terminé escribiendo es éste.


--- Código: Text ---         Dim Dividendo As Double        Dim Divisor As Double        Dim Operando As Double        Dim Contador As Integer        Dim Resto As Double        Dividendo = txtDividendo.Text        Divisor = txtDivisor.Text        If Divisor = 0 Then            Contador = 0            Resto = 0        ElseIf Divisor > Dividendo Then            Contador = 0            Resto = Dividendo        ElseIf Dividendo = Divisor Then            Contador = 1            Resto = 0        ElseIf Divisor + Divisor > Dividendo Then            Contador = 1            Resto = Dividendo - Divisor        Else            Operando = Divisor            Contador = 1            Do                Operando += Divisor                Contador += 1            Loop While Operando + Divisor <= Dividendo            Resto = Dividendo - Operando         End If        lblResul.Text = "Cociente = " & Contador & ", resto = " & Resto 
Funciona bien por ejemplo con 8 entre 0.5 (16 exacto) pero entre 0.2 me da 0.1999999999996.
Le encontráis explicación a esto? Gracias y un saludo ;)

Navegación

[0] Índice de Mensajes

Ir a la versión completa