Uma forma simples de resolver isso que a variavel que recebe o valor do resultado tenha o função transform(), contendo na mascara 3 casas decimais e ao apresentar na tela ou impresso vc somente apresente 2 casas decimais. qualquer coisa estamos ai.
Para mim isso funciona muito bem.
Talvez ainda pode ser útil para alguém.
/********************
PROGRAMA : TRUNCA.PRG
OBJETIVO : Trunca um número decimal.
DATA : 18/09/2004
NOTA: Compilar com as opções /L /M
Sintaxe:
trunca(nNumero, [nDecimais]) -> nNumeroTruncado
Argumentos:
nNumero -> É o número a ser truncado.
[nDecimais] -> Indica a quantidade de casas decimais que se deseja consi-
derar. 0 indica nómero inteiro.
Ex.: trunca(1,23456789, x)
x=0 = número inteiro -> 1
x=1 = uma casa decimal -> 1,2
x=2 = duas casas decimais -> 1,23
Retorno:
trunca() retorna um número com o resultado da operação.
// Transforma o número numa cadeia de caracteres, trunca e converte para número
nNumero := str(nNumero * (10^nDecimais))
nNumero := val(left(nNumero, at(".", nNumero))) / (10^nDecimais)
E pra quem pretende usar MySQL, pode chamar de Floor().
Gostei do detalhe de 10 ^ n, não tinha pensado nisso.
A propósito....
Percebi no MySQL o problema de ponto flutuante.
Mas lá, o Round() resolve.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2) "The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell" https://github.com/JoseQuintas/