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, multithread, gtwvg, fivewin 25.12, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui), (hmg3), (hmg extended), (oohg), PNotepad, ASP, (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/