Clipper On Line • Ver Tópico - TRUNCAR VALORES E NAO ARREDONDAR

TRUNCAR VALORES E NAO ARREDONDAR

Discussão sobre a linguagem CA-Clipper.

Moderador: Moderadores

 

TRUNCAR VALORES E NAO ARREDONDAR

Mensagempor rubens » 03 Jan 2007 15:15

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
"Eu e minha casa servimos ao Senhor e você ???"
Avatar de usuário

rubens
Colaborador

Colaborador
 
Mensagens: 1518
Data de registro: 16 Ago 2003 09:05
Cidade/Estado: Nova Xavantina - MT
Curtiu: 77 vezes
Mens.Curtidas: 104 vezes

Mensagempor Everton » 03 Jan 2007 16:09

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.
Everton Luiz Penteado
Clipper 5.2b - Blink 7.0
Everton
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 141
Data de registro: 07 Jul 2004 08:53
Cidade/Estado: Campo Grande - MS
Curtiu: 0 vez
Mens.Curtidas: 0 vez

Mensagempor gvc » 03 Jan 2007 18:46

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
"TRS-80/Sincler/Apple/PC - Clipper Winter 85, tlink 1.0 [pc 10 MHz - 640K] {NEZ 8000 2Kb RAM}"
{POG - Programação Orientada a Gambiarra}
Avatar de usuário

gvc
Colaborador

Colaborador
 
Mensagens: 1269
Data de registro: 23 Ago 2005 10:57
Curtiu: 0 vez
Mens.Curtidas: 0 vez

Mensagempor Toledo » 03 Jan 2007 18:55

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,
Toledo - Clipper On Line
toledo@pctoledo.com.br
Harbour 3.2/MiniGui/HwGui
Faça uma doação para o fórum, clique neste link: http://www.pctoledo.com.br/doacao
Avatar de usuário

Toledo
Administrador

Administrador
 
Mensagens: 3038
Data de registro: 22 Jul 2003 18:39
Cidade/Estado: Araçatuba - SP
Curtiu: 263 vezes
Mens.Curtidas: 258 vezes

Mensagempor diogenes_varela » 03 Jan 2007 21:04

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))
Os computadores não sabem o que fazem. Nós, na maioria das vezes, também não...

E disse ao Programador: "Todos os teus programas terão erros e irás corrigi-los até ao fim dos teus dias". Gen. 1:9
Avatar de usuário

diogenes_varela
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 206
Data de registro: 04 Nov 2006 19:33
Cidade/Estado: Brasília - DF
Curtiu: 0 vez
Mens.Curtidas: 1 vez

TRUNCAR VALORES E NAO ARREDONDAR

Mensagempor Humberto » 26 Mai 2021 11:51

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)
Humberto
Usuário Nível 1

Usuário Nível 1
 
Mensagens: 1
Data de registro: 26 Mai 2021 11:38
Cidade/Estado: Goiânia/GO
Curtiu: 0 vez
Mens.Curtidas: 0 vez

TRUNCAR VALORES E NAO ARREDONDAR

Mensagempor Itamar M. Lins Jr. » 26 Mai 2021 12:40

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.
Avatar de usuário

Itamar M. Lins Jr.
Colaborador

Colaborador
 
Mensagens: 6927
Data de registro: 30 Mai 2007 11:31
Cidade/Estado: Ilheus Bahia
Curtiu: 309 vezes
Mens.Curtidas: 503 vezes

TRUNCAR VALORES E NAO ARREDONDAR

Mensagempor JoséQuintas » 26 Mai 2021 12:58

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.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18009
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes




Retornar para CA-Clipper

Quem está online

Usuários vendo este fórum: Nenhum usuário registrado online e 8 visitantes


Ola Amigo, espero que meu site e forum tem lhe beneficiado, com exemplos e dicas de programacao.
Entao divulgue o link da Doacao abaixo para seus amigos e redes sociais ou faça uma doacao para o site forum...
MUITO OBRIGADO PELA SUA DOACAO!
Faça uma doação para o forum
cron
v
Olá visitante, seja bem-vindo ao Fórum Clipper On Line!
Efetue o seu login ou faça o seu Registro