Arredondar para cima sempre
06/05/2004
0
Earmarques
Post mais votado
06/05/2004
Tirei estes dois exemplos do DTDelphi
Bem, eu ainda não usei estas funções, de qualquer forma espero ter ajudado.
Ilano.
Ilanocf
Mais Posts
07/05/2004
Blivio
Atenciosamente,
Blivio
07/05/2004
Luizf2
Você já tentou usar a funcão ´Ceil´?
Esta função retorna o menor inteiro, maior que o número passado como parâmetro, por exemplo Ceil(2.8) = 3, ou Ceil(0.37) = 1.
[]´s
Luiz Fernando
07/05/2004
Wagnerpb
1,98 + 1 = 2,98 , Trunc(2.98) = 2
1,05 + 1 = 2,05 , Trunc(2,05) = 2
2,74 + 1 = 3,74 , Trunc(3,74) = 3
Simples né, algumas coisas parecem tão obvias que nem dá para acreditar...
07/05/2004
Rodc
temp := 2.56;
if int(temp) <> temp then
Campo.AsFloat := Int(2.36) + 1;
Funciona muito bem!!!
Rodrigo Cesar dos Santos
NGM Informática
01/09/2016
Scv Sistemas
function ArredUp(nValor: Double; Casas: Integer): Double; var sValor, sDecimais, sParteValor, sNovoValor, sCasas :string; Ponto, I, UltimoDigito :Integer; begin sCasas := '';//zerar a variável que acrescenta as casas decimais for I := 1 to Casas do sCasas := sCasas + '0';//quantidade de casas decimais passada na função Ponto := Pos(',',FormatFloat('0.'+sCasas, nValor));//verifica onde esta a vírgula que separa as casas decimais, de acordo com o parametro de quantidade de casas passado sValor := FloatToStr(nValor); //grava o valor numa string para separação das casas decimais sDecimais := Trim(Copy(sValor, Ponto + 1, length(sValor)));//pega as casas decimais do jeito que veio sem tratamento sParteValor := Trim(Copy(sValor, 1, Ponto - 1));//pegar a parte anterior as casas decimais if Length(sDecimais) > Casas then//significa que deu mais doque duas casas decimais depois da vírgula begin sDecimais := Trim(Copy(sDecimais ,1 , Casas));//definir a quantidade de casas de acordo com o parametro UltimoDigito := StrToInt(Trim(Copy(sDecimais , Length(sDecimais), 1)));//pegar o ultimo digito de casas decimais UltimoDigito := UltimoDigito + 1; //como a função mesmo diz, jogar mais um, sempre arredondar o ultimo valor para cima sDecimais := Copy(sDecimais, 1, Casas - 1)+IntToStr(UltimoDigito);//jogar o novo ultimo digito calculado somando mais um nos decimais sNovoValor := StringReplace(sParteValor,',','',[rfReplaceAll])+','+sDecimais;//define o novo valor gerado Result := StrToFloat(sNovoValor);//retornar o novo valor gerado end else Result := nValor;//caso não seja maior, apenas devolver o valor que veio end; //execmplo de uso nResultado := ArredUP(1.233, 2); {valor vai ficar 1,24}
13/12/2018
Sismais Tecnologia
Tirei estes dois exemplos do DTDelphi
[quote:2fe5191837]
Excelente função para arrendondamento de valores.
Alias, a única que funciona.
function Arredondar(Valor: Double; Dec: Integer): Double;
var
Valor1,
Numero1,
Numero2,
Numero3: Double;
begin
Valor1:=Exp(Ln(10) * (Dec + 1));
Numero1:=Int(Valor * Valor1);
Numero2:=(Numero1 / 10);
Numero3:=Round(Numero2);
Result:=(Numero3 / (Exp(Ln(10) * Dec)));
end;
{Dica Enviada por Jair Marquetti (jmarquetti@bol.com.br) [url=http://www.lloydsoft.hpg.ig.com.br/falecomigo.htm]usando o formulário do site[/url]}
[/quote:2fe5191837]
[quote:2fe5191837]
Exemplo :
QryBasico.FieldByName(´Valor´).AsFloat := SimpoRound(Passe Seu Valor Aqui);
O Valor passado para a função simporound será arrendodado em um valor exato. Diferente da função round onde ela arredonda o valor mais as vezes arredonda errado.
Enviada por:
Jason Lopes G Silva (jasonbh@brfree.com.br)
[/quote:2fe5191837]
Bem, eu ainda não usei estas funções, de qualquer forma espero ter ajudado.
Ilano.
Esta função não está arredondando sempre pra cima. Exemplo: 18,985 retorna: 18,98 (mesmo resultado do SimpleRoundTo, e padrão ABNT)
13/12/2018
Sismais Tecnologia
function ArredUp(nValor: Double; Casas: Integer): Double; var sValor, sDecimais, sParteValor, sNovoValor, sCasas :string; Ponto, I, UltimoDigito :Integer; begin sCasas := '';//zerar a variável que acrescenta as casas decimais for I := 1 to Casas do sCasas := sCasas + '0';//quantidade de casas decimais passada na função Ponto := Pos(',',FormatFloat('0.'+sCasas, nValor));//verifica onde esta a vírgula que separa as casas decimais, de acordo com o parametro de quantidade de casas passado sValor := FloatToStr(nValor); //grava o valor numa string para separação das casas decimais sDecimais := Trim(Copy(sValor, Ponto + 1, length(sValor)));//pega as casas decimais do jeito que veio sem tratamento sParteValor := Trim(Copy(sValor, 1, Ponto - 1));//pegar a parte anterior as casas decimais if Length(sDecimais) > Casas then//significa que deu mais doque duas casas decimais depois da vírgula begin sDecimais := Trim(Copy(sDecimais ,1 , Casas));//definir a quantidade de casas de acordo com o parametro UltimoDigito := StrToInt(Trim(Copy(sDecimais , Length(sDecimais), 1)));//pegar o ultimo digito de casas decimais UltimoDigito := UltimoDigito + 1; //como a função mesmo diz, jogar mais um, sempre arredondar o ultimo valor para cima sDecimais := Copy(sDecimais, 1, Casas - 1)+IntToStr(UltimoDigito);//jogar o novo ultimo digito calculado somando mais um nos decimais sNovoValor := StringReplace(sParteValor,',','',[rfReplaceAll])+','+sDecimais;//define o novo valor gerado Result := StrToFloat(sNovoValor);//retornar o novo valor gerado end else Result := nValor;//caso não seja maior, apenas devolver o valor que veio end; //execmplo de uso nResultado := ArredUP(1.233, 2); {valor vai ficar 1,24}
A função parece boa, mas o arredondar sempre pra cima deveria ser aplicado quando o último decimal for 5. Nesta função ai Se o decimal for menor que 5 também está arredondando pra cima.
Ex: 18,981 arredonda para 18,99.
16/05/2023
Gladstone Matos
valorParcelaCalculado := StrToFloat(FormatFloat('0.00',valorParcelaCalculado));
16/05/2023
Arthur Heinrich
Existem 4 maneiras possíveis de se arredondar:
Para "baixo" (em módulo), quando simplesmente truncamos os decimais. A função Int() ou Trunc() fazem isso, sendo que a primeira retorna um float e a segunda um inteiro.
Para baixo (sempre), quando retornamos o maior inteiro, menor ou igual ao valor. Isto é feito pela função Floor().
Para cima (sempre), quando retornamos o menor inteiro, maior ou igual ao valor. Isto é feito pela função Ceil().
A função Round() arredonda o valor fracionário para o inteiro mais próximo. Porém, existem duas vertentes, que podem ser inclusive ajustadas através de flags do processador:
Arredondamento financeiro: Arredonda para o inteiro mais próximo. Se a parte fracionária for 0.5, arredonda para cima (em módulo?). Não me lembro de -0.5 arredonda para 0 ou -1. Eu chutaria -1.
Arredondamento científico: Arredonda para o inteiro mais próximo. Se a parte fracionária for 0.5, arredonda para o par mais próximo. 1.5 -> 2 e 2.5 -> 2
A função descrita originalmente se assemelha ao Ceil(). Porém, esta função geralmente retorna inteiros. Precisa ver se os valores não ultrapassam a capacidade.
16/05/2023
Arthur Heinrich
V := Int(V)+Sign(Frac(V));
Onde Sign(V) representa o sinal: -1 para negativos, +1 para positivos e 0 se for zero.
Desta forma, truncamos o número e, somamos 1 de acordo com o sinal da parte fracionária do valor.
16/05/2023
Arthur Heinrich
V := Int(V)+Sign(Frac(V));
Onde Sign(V) representa o sinal: -1 para negativos, +1 para positivos e 0 se for zero.
Desta forma, truncamos o número e, somamos 1 de acordo com o sinal da parte fracionária do valor.
Clique aqui para fazer login e interagir na Comunidade :)