Arredondamento ....
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
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
Curtidas 0
Respostas
Marco Salles
17/05/2005
Amigo , me corrija se eu estiver errado
O Uso da mascara , so intervere na visualização
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
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
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
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
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
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),
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