TRUNCAR VALOR COM 2 CASAS

FUTURA 20/09/2011 18:33:54
#384792
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 ?
TECLA 20/09/2011 20:26:23
#384796
O problema só ocorre com valores com final 0 (zero)?
MARCELO.TREZE 20/09/2011 21:03:16
#384799
ué eu fiz um teste aqui e deu certo

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

FUTURA 21/09/2011 07:49:17
#384807
pois é, atualizei no cliente e de erro, por exe:, valor que esta no banco de dados como 1,150 , retorna 1,14...
ROBIU 21/09/2011 09:19:56
#384817
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
FUTURA 21/09/2011 09:38:45
#384824
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.;;

FEDERHEN 21/09/2011 11:48:47
#384853
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

ROBIU 21/09/2011 12:31:23
#384857
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?
FUTURA 21/09/2011 12:59:49
#384860
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...
ROBIU 22/09/2011 12:13:19
#384946
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.
Tópico encerrado , respostas não são mais permitidas