Fórum Arredondamento de Valores #164735
05/06/2003
0
Caros colegas tenho um pequeno problema que não consigo resolver, se alguem puder me ajudar.
Tenho uma multiplicação da seguinte forma:
Qtde= 6
Preço Bruto = 117,82
Desconto = 80,31
O preço liquido é = Preco Bruto - Desconto que da = 23,19876
Eu gostaria de pegar somente o valor 23,19 e gravar no banco paradoxo
Grato pela atenção
Tenho uma multiplicação da seguinte forma:
Qtde= 6
Preço Bruto = 117,82
Desconto = 80,31
O preço liquido é = Preco Bruto - Desconto que da = 23,19876
Eu gostaria de pegar somente o valor 23,19 e gravar no banco paradoxo
Grato pela atenção
Fernando
Curtir tópico
+ 0
Responder
Posts
05/06/2003
Miller
Fernando, vc pode multiplicar o vlr por 100, truncar o novo vlr e dividi-lo por 100. Se vc quizer mais casas decimais basta multiplicar por 1000, 10000 ...
Responder
Gostei + 0
05/06/2003
Kaybueno
Olá! Td bem?!
Quem sabe não posso te ajudar.
Se vc quer o valor arredondado para duas casas decimais, pode definir a variável do resultado como double. Fiz um programa onde pegava números grandes para multiplicação, mas queria que o resultado fosse arredondado. Depois vc converte para string.
Olha o código que fiz, nas partes principais:
var OP1, Result1: double
A: string [12];
{ele pega o OP1, que é um valor do bd com 4 casas após a virgula e multiplica pelo numero qualquer q digito numa cx de texto, dai ele converte para string, é aí q está o segredo, veja}
Str(Result1:12:2,A); { onde vc vê o 2, é onde vc define 2 casas}
Depois vc grava esse valor em um BD.
Ou pode tentar usar o código abaixo:
Arredonda as casas decimais de um valor Float
function Arredonda(Valor : Real Decimais : Byte) : Extended;
var
i : Byte;
ML : string;
RR : string;
begin
ML := ´0.´;
for i := 1 To Decimais do
begin
ML := ML + ´0´;
end;
RR := FormatFloat(ML,Valor);
Result := StrToFloat (RR);
end;
Ou este aqui:
Quando houver,Arredonda uma possivel terceira casa decimal em uma variável
function RoundNum(Valor:Extended;Decimais:Integer):Extended;
var
I:Integer;
Multiplicador:Integer;
begin
if Decimais > 15 then
begin
Decimais := 15;
end
else if Decimais < 0 then
begin
Decimais := 0;
end;
Multiplicador := 1;
for I:=1 to Decimais do
begin
Multiplicador := Multiplicador*10;
end;
Result := round(Valor*Multiplicador)/Multiplicador;
end;
Espero q dê certo :wink:
Até mais...
Quem sabe não posso te ajudar.
Se vc quer o valor arredondado para duas casas decimais, pode definir a variável do resultado como double. Fiz um programa onde pegava números grandes para multiplicação, mas queria que o resultado fosse arredondado. Depois vc converte para string.
Olha o código que fiz, nas partes principais:
var OP1, Result1: double
A: string [12];
{ele pega o OP1, que é um valor do bd com 4 casas após a virgula e multiplica pelo numero qualquer q digito numa cx de texto, dai ele converte para string, é aí q está o segredo, veja}
Str(Result1:12:2,A); { onde vc vê o 2, é onde vc define 2 casas}
Depois vc grava esse valor em um BD.
Ou pode tentar usar o código abaixo:
Arredonda as casas decimais de um valor Float
function Arredonda(Valor : Real Decimais : Byte) : Extended;
var
i : Byte;
ML : string;
RR : string;
begin
ML := ´0.´;
for i := 1 To Decimais do
begin
ML := ML + ´0´;
end;
RR := FormatFloat(ML,Valor);
Result := StrToFloat (RR);
end;
Ou este aqui:
Quando houver,Arredonda uma possivel terceira casa decimal em uma variável
function RoundNum(Valor:Extended;Decimais:Integer):Extended;
var
I:Integer;
Multiplicador:Integer;
begin
if Decimais > 15 then
begin
Decimais := 15;
end
else if Decimais < 0 then
begin
Decimais := 0;
end;
Multiplicador := 1;
for I:=1 to Decimais do
begin
Multiplicador := Multiplicador*10;
end;
Result := round(Valor*Multiplicador)/Multiplicador;
end;
Espero q dê certo :wink:
Até mais...
Responder
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)