Arredondamento ....

Delphi

17/05/2005

Pessoall,

estou com um probleminha em uma rotina de impressao de NF.

Ja estou utilizando mascaras nos campos de minha tabelas (#,0.00) para deixar com 2 casas decimais ..., mais o problema esta sendo o seguinte :
- mesmo deixando c/ a mascara acima, qdo gravo no banco , ainda considera a 3 casa .., sendo apenas mostrado com 2 casas no software... ai mora meu problema, tenho IPI no valor de 14,56 e total da Prod no valor de 291,36 ... so q os mesmos estao no banco com a 3ª casa no valor 3, ficando 14,563 e 291,363 ... somando para o totalizar a NF , terei o valor de 305,83 (14,563+291,263), sendo o correto para o ´dito-cujo´ do escritorio contabil 305,82.

Como posso resolver isso ?

Uso paradox nesse aplicativo.

Obr

Marcel


Scandolara

Scandolara

Curtidas 0

Respostas

Marco Salles

Marco Salles

17/05/2005

Amigo , me corrija se eu estiver errado

Ja estou utilizando mascaras nos campos de minha tabelas (#,0.00) para deixar com 2 casas decimais ...,


O Uso da mascara , so intervere na visualização

so q os mesmos estao no banco com a 3ª casa


Ou voce muda a mascara para Tres digitos ou Voce Altere a configuaração regional do Windows para Duas Casas

A Primeira opção , por se tratar de notas fiscais , parece mais estranha

A segunda opção , acredito , que voce pode usar a Instrução
CurrencyDecimals:=2; na inicialização do seu aplicativo


P:s CurrencyDecimals: quantas casas decimais tem em um valor monetário

:arrow: Assim , acredito que voce vai armazenar valores em seu B.D somente com duas casas Decimais ....

:arrow: Se isto ainda assim , não funcionar , sugiro , que se faça um truncamento , antes de salvar estes valores monetários no BD


GOSTEI 0
Josimar

Josimar

17/05/2005

Você pode declarar Math no Uses e proceder da seguinte forma:

RoundTo((Valor.Currency),-2)

Valor.Currency - será o parametro que você irá informar
-2 - é o numero de casas decimais que deseja usar

Espero ter ajudado


GOSTEI 0
Fernando

Fernando

17/05/2005

eu tambem ja tive esse problema de arredondamento
criei uma rotina que resolveu meu problema

cria uma varial chamada francao : Currency

//Retorna a parte fracionária de um número
Fracao :=Frac(PRECO);
If Length(RemoveCaracteres(FloatToStr(Fracao))) >= 3 then
PRECO := Trunc(PRECO * 100) / 100;

A logica e pegar somente a fração tipo 305,826 , nessa rotina ele vai pegar somente o 826 e depois a funcao length vai testar se existe uma dizima ou nao , no caso se tiver + de 3 casas decimais ele vai usar a funcao trunc para pegar somente as 2 casas e vai ficar 305,82
se vc quizer pegar mais casas decimais e so multiplicar por 1000 e assim por diante, essa funcao funciona perfeita no meu sistema

a variavel PRECO e o variavel que contera o seu valor o uo seu total pq se vc so somar 305,83 (14,563+291,263), ele vai arredondar mesmo, se vc usar essa funcao vc poderá escolher quantas casas decimais vc vai pegar.

qualquer coisa entre em contato


terei o valor de 305,83 (14,563+291,263),


GOSTEI 0
POSTAR