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.