Pues después de una tarde y una mañana con operaciones, compruebo que si no uso la función round no funciona este ejemplo.
Se trata de un comienzo de un ejemplo donde tienes una cantidad en € y debes descomponerlas en monedas, valeee podían ser billetes.
Este fue el ejemplo que fallaba: Si lo probáis veréis que se ve claramente 0.05 y 0.05 en la comparación de la condicion del bucle While.
resto>=valores[i]
Public Sub Main()
Dim valores As Float[] = [2, 1, 0.5, 0.2, 0.1, 0.05, 0.02, 0.01]
Dim salida As New Float[8]
Dim cantidad As Float
Dim resto As Float
Dim i As Integer
cantidad = 0.35
resto = cantidad
Do While i <= valores.Max And resto > 0
If valores[i] = 0.05 Then 'Cuando el valor es 0.05 interrumpimos el programa
Print "Parada" 'Colocar un breakpoint aquí y continuar con F8 (paso a paso) o F5 para ejecutar todo el bloque
Endif
Do While resto >= valores[i]
resto -= valores[i]
salida[i] += 1
Loop
i += 1
Loop
For i = 0 To 7
Print "Valores de: "; valores[i]; " x "; salida[i]; " = "; valores[i] * salida[i]
Next
End
Dim valores As Float[] = [2, 1, 0.5, 0.2, 0.1, 0.05, 0.02, 0.01]
Dim salida As New Float[8]
Dim cantidad As Float
Dim resto As Float
Dim i As Integer
cantidad = 0.35
resto = cantidad
Do While i <= valores.Max And resto > 0
If valores[i] = 0.05 Then 'Cuando el valor es 0.05 interrumpimos el programa
Print "Parada" 'Colocar un breakpoint aquí y continuar con F8 (paso a paso) o F5 para ejecutar todo el bloque
Endif
Do While resto >= valores[i]
resto -= valores[i]
salida[i] += 1
Loop
i += 1
Loop
For i = 0 To 7
Print "Valores de: "; valores[i]; " x "; salida[i]; " = "; valores[i] * salida[i]
Next
End
Y aquí el que funciona, o eso parece.
Public Sub Main()
Dim valores As Float[] = [2, 1, 0.5, 0.2, 0.1, 0.05, 0.02, 0.01]
Dim salida As New Float[8]
Dim cantidad As Float 'Solo se usa una vez.
Dim resto As Float
Dim i As Integer
cantidad = 0.35
resto = cantidad
Do While i <= valores.Max And resto > 0
Do While Round(resto, -2) >= Round(valores[i], -2)
resto -= valores[i]
salida[i] += 1
Loop
i += 1
Loop
For i = 0 To 7
Print "Valores de: "; valores[i]; " x "; salida[i]; " = "; valores[i] * salida[i]
Next
End
Dim valores As Float[] = [2, 1, 0.5, 0.2, 0.1, 0.05, 0.02, 0.01]
Dim salida As New Float[8]
Dim cantidad As Float 'Solo se usa una vez.
Dim resto As Float
Dim i As Integer
cantidad = 0.35
resto = cantidad
Do While i <= valores.Max And resto > 0
Do While Round(resto, -2) >= Round(valores[i], -2)
resto -= valores[i]
salida[i] += 1
Loop
i += 1
Loop
For i = 0 To 7
Print "Valores de: "; valores[i]; " x "; salida[i]; " = "; valores[i] * salida[i]
Next
End
Puñetitas como estas te hacen perder una tarde, je, si añades a esto, infinitas posibilidades, son infinitas posibilidades de diversión!.
Saludos