PROBLEMA EM CALCULO

ROBIU 11/08/2009 10:41:29
#319555
Aparentemente é um bug mesmo. Só acontece com números decimais pares de uma casa. O vb6 deve fazer o calculo diferente do excel. Notamos que o excel usa a vírgula e o vb o ponto como separador decimal. No seu caso, se trocar o 100 por 10000000, vão aparecer tantos 99... quanto o número suporte. Ex.: 600,39999999....(Infinito) = 600,40.
Conclusão é que o vb6 e o access calcula com rotinas internas diferente. O Cdec está forçando um decimal ou até convertendo o valor para um tipo númerico correto da função:

Observe:

Int(500.4 * 100)=50039
Int(500.4 * 1000000)=500399999
Int(cdec(500.4) * 100)=50040


O importante é que sua função já está funcionando com minha resposta anterior:

Int(CDec(1200.655 / 2) * 100) / 100

RICART 11/08/2009 11:56:42
#319559
Colega,
A função está dando erro. Veja esta outra. Testei e atendeu a sua regra:

Private Sub Command1_Click()
MsgBox TiraDecimais(1200.67 / 2, 2)
End Sub

Function TiraDecimais(nValor As Double, nCasas As Integer) As Double
Dim nDecimais As Integer
nDecimais = 10 ^ nCasas [ô]para saber com quantas casas decimais vai ser retornado o número

Dim strValorDecimal As String

strValorDecimal = (nValor * nDecimais)
If InStr(strValorDecimal, [Ô],[Ô]) > 0 Then
TiraDecimais = Val(Mid(strValorDecimal, 1, InStr(strValorDecimal, [Ô],[Ô]) - 1)) / nDecimais
Else
TiraDecimais = Val(strValorDecimal) / nDecimais
End If

End Function
GERMANO 11/08/2009 13:06:48
#319568
Bem acho que deve ser algum bug da função int, porem pode fazer de outras maneiras:

Citação:



CLng(((1200.6 / 2) * 100)) / 100

ou

(((1200.6 / 2) * 100) 1) / 100


RICART 11/08/2009 14:08:50
#319571
Eh, realmente a função do ROBIU é a mais correta. Testei com vários valores e opções de casas decimais. Um valor bom para testar também é 1200.89

Fiz a adaptação para a minha proposta. Creio que assim, fica mais tecnicamente correta:

Private Sub Command1_Click()
MsgBox TiraDecimais(1200.67 / 2, 2)
End Sub

Function TiraDecimais(nValor As Double, nCasas As Integer) As Double
Dim nDecimais As Integer
nDecimais = 10 ^ nCasas [ô]para saber com quantas casas decimais vai ser retornado o número

TiraDecimais = Int(CDec(nValor) * nDecimais) / nDecimais

End Function
Página 2 de 2 [14 registro(s)]
Tópico encerrado , respostas não são mais permitidas