Página 1 de 1
TRUNCAR VALORES E NAO ARREDONDAR
Enviado: 03 Jan 2007 16:15
por rubens
Ola pessoal...
Achei que este problema nao fosse acontecer comigo, mas estou quebrando a cabeca...
Preciso trunca o valor e nao arredondar.. .como eu faco...
Por exemplo em um calculo me retorna 1,6752
Ai o clipper arredonda para 1,80 e bagunça a porcentagem que gerou este valor..
Preciso revolver isso sem mexer nas casas decimais...
Rubens
Enviado: 03 Jan 2007 17:09
por Everton
Olá Rubens.
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.
Enviado: 03 Jan 2007 19:46
por gvc
Seu arredondamento aparenta estar errado. 1,6752 p/ 1,80?
A função round(n1, n2) faz o arredondamento que vc quer.
n1 - número à ser arredondado.
n2 - número de casas decimais para arredondamento.
SET DECIMALS TO 2
SET FIXED ON
//
? ROUND(10.4, 0) // Result: 10.00
? ROUND(10.5, 0) // Result: 11.00
? ROUND(10.51, 0) // Result: 11.00
? ROUND(10.49999999999999, 2) // Result: 10.50
? ROUND(101.99, -1) // Result: 100.00
? ROUND(109.99, -1) // Result: 110.00
? ROUND(109.99, -2) // Result: 100.00
Enviado: 03 Jan 2007 19:55
por Toledo
Rubens, se você quer truncar o valor em duas casas decimais mas sem fazer o arredondamento, basta fazer o seguinte calculo:
calculo=1.6752
calculo2=int(calculo*100)/100
O valor da variável calculo2 será de 1,67.
Abraços,
Enviado: 03 Jan 2007 22:04
por diogenes_varela
Simplifique assim:
calculo = 1.6752
calculo2 = PADR(calculo,4)
O valor de calculo2 também será 1.67
Se for usar a variável para outros cálculos, basta acrescentar VAL que o valor continuará sendo tipo numérico:
calculo2 = VAL(PADR(calculo,4))
TRUNCAR VALORES E NAO ARREDONDAR
Enviado: 26 Mai 2021 11:51
por Humberto
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.
*/
*******************************************************************************
parameters nNumero, nDecimais
// Consiste os parametros.
nNumero := if(valtype(nNumero) # "N", 0, nNumero)
nDecimais := if(valtype(nDecimais) # "N", 0, abs(nDecimais))
// 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)
return (nNumero)
TRUNCAR VALORES E NAO ARREDONDAR
Enviado: 26 Mai 2021 12:40
por Itamar M. Lins Jr.
Olá!
Depois de usar calculo2=int(calculo*100)/100
No final troquei para ROUND(nValor,2)
Por conta do arredondamento que o comerciante faz questão.
Saudações,
Itamar M. Lins Jr.
TRUNCAR VALORES E NAO ARREDONDAR
Enviado: 26 Mai 2021 12:58
por JoséQuintas
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.