TRUNCAR VALOR COM 2 CASAS
Pessoal, para truncar valor com 2 casas decimais, estou usando a função abaixo, para numeros com digito na terceira casa da certo, agora se o valor for [Ô]redondo[Ô] ta tirando um centavo, ex:
12,756 = 12,75
12,753 = 12,75
12,750 = 12,74 <----aqui teria q manter 12,75
para chamar a função: valor= Format(f_trucate(wsval, 2), [Ô]##0.00[Ô])
Private Function f_trucate(ByVal Numero As Double, ByVal fator As Byte) As Double
f_trucate = Fix(Numero * 10 ^ fator) / 10 ^ fator
End Function
o q esta errado ?
12,756 = 12,75
12,753 = 12,75
12,750 = 12,74 <----aqui teria q manter 12,75
para chamar a função: valor= Format(f_trucate(wsval, 2), [Ô]##0.00[Ô])
Private Function f_trucate(ByVal Numero As Double, ByVal fator As Byte) As Double
f_trucate = Fix(Numero * 10 ^ fator) / 10 ^ fator
End Function
o q esta errado ?
O problema só ocorre com valores com final 0 (zero)?
ué eu fiz um teste aqui e deu certo
0 resultado foi 12,75
Private Sub Command1_Click()
MsgBox Format(f_trucate([Ô]12,750[Ô], 2), [Ô]##0.00[Ô])
End Sub
Private Function f_trucate(ByVal Numero As Double, ByVal fator As Byte) As Double
f_trucate = Fix(Numero * 10 ^ fator) / 10 ^ fator
End Function
0 resultado foi 12,75
pois é, atualizei no cliente e de erro, por exe:, valor que esta no banco de dados como 1,150 , retorna 1,14...
observei que isso não acontece com todos os números. Para resolver, troque a função Fix() por Val():
Private Function f_trucate(ByVal Numero As Double, ByVal fator As Byte) As Double
f_trucate = Val(Numero * 10 ^ fator) / 10 ^ fator
End Function
exato robiu, ocorre em alguns casos, principalmente qdo não existe a terceira casa ou seja, ela seria zero...parece que na tela do pdv resolveu, agora para o ecf ta indo valor errado,
pdv = 13,26 --correto
ecf = 1,326--errado.;;
pdv = 13,26 --correto
ecf = 1,326--errado.;;
Tenta a função INT()
Private Function f_trucate(ByVal Numero As Double, ByVal fator As Byte) As Double
f_trucate = Int(Numero * (10 ^ fator)) / (10 ^ fator)
End Function
Então tem que verificar na rotina que passa o valor para o ecf. pode ser o separador decimal ou a função format(). E antes, passava o valor correto? como você passa os dados para a ecf?
robiu....é esse mesmo campo de valor que é truncado...contornei o problema multiplicando o valor por 10....ou seja na tela deu certo como vc passou, e para o ecf, multiplico esse valor truncado por 10
federhen, com int() não da certo, fica no problema anterior...
federhen, com int() não da certo, fica no problema anterior...
Você já verificou se não há alguma rotina que esteja modificando o valor, como sugeri acima?
Outra coisa é a declaração da variável:
Note que um mesmo valor pode ter resultado diferente na sua rotina, dependendo do tipo da variável:
Supondo o valor 125,270
Variável String = 125,270
Variável Double = 125,27
E isso pode está interferindo no cálculo.
Você mudou a variável para String e funcionou na tela. Será que esta variável não esta como Double na hora de passar para a ecf.
Caso não seja isso, o jeito é deixar o valor multiplicado por 10.
Outra coisa é a declaração da variável:
Note que um mesmo valor pode ter resultado diferente na sua rotina, dependendo do tipo da variável:
Supondo o valor 125,270
Variável String = 125,270
Variável Double = 125,27
E isso pode está interferindo no cálculo.
Você mudou a variável para String e funcionou na tela. Será que esta variável não esta como Double na hora de passar para a ecf.
Caso não seja isso, o jeito é deixar o valor multiplicado por 10.
Tópico encerrado , respostas não são mais permitidas