Árvore de páginas

Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.

...

Portuguese

Pagetitle
DEC_CREATE
DEC_CREATE

Função: DEC_CREATE

Esta função permite criar um decimal com valor inicial, precisão e escala especificado.

DEC_CREATE ( < xValorInicial>, < iPrecisao>, < iEscala> ) --> dDecimal

 

NomeTipoDescriçãoObrigatórioReferência
xValorInicialQualquerIndica o valor inicial do decimal. Somente caractere ou numérico.X 
iPrecisaoNuméricoIndica a precisão do decimal.O valor deve ser maior que zero e menor que 64.X 
iEscalaNuméricoIndica a escala do decimal.Valor deve ser maior ou igual a zero e menor que o parâmetro iPrecisaoX 

 

dDecimal
    (decimal)
  • Retorna o novo decimal criado.

Para utilizar qualquer cálculo aritmético com decimal de ponto fixo, é necessário criar primeiro o número decimal. Para isso, o parâmetro <vValorInicial> deve ser do tipo caracter ou númerico. Porém, ser for passado qualquer outro tipo de dado não listado, a funçãolançará uma exceção para interromper a execução.

Se o parâmetro <vValorInicial> for do tipo de dado caracter e o conteúdo da string não for um decimal válido, o decimal será criado e seu valor inicial será igual a 0.

Caso o valor passado nos parâmetros <iPrecisao> e <iEscala> contenham parte decimal, estes serão desconsiderados.

Importante
A criação de um valor com precisão em decimal de ponto fixo, quando informamos um número como parâmetro (e não uma string), está sujeito ao limite de precisão numérica pré-existente neste número. Vide o exemplo abaixo, onde criamos um número constante e passamos para a função DEC_CREATE: 

User Function DecEx()
Local dfTest
dfTest := DEC_CREATE(5.7591111111111119,21,20)
alert(dec2)
Return
 

O número informado é interpretado pelo compilador como uma constante numérica, sujeita ao desvio de precisão decimal de ponto flutuante da linguagem AdvPL. Ao criarmos um número decimal de ponto fixo a partir desta constante compilada e tratada como um número na linguagem AdvPL, vamos obter o valor  "5.75911111111111200000" , onde houve arredondamento na 15ª casa decimal.  Para o decimal de ponto fixo ser criado corretamente a partir de um número constante, deve-se colocá-lo entre ASPAS, para a string representativa do número gerar o valor em memória. Vide abaixo: 

User Function DecEx()
Local dfTest
dfTest := DEC_CREATE( "5.7591111111111119",21,20) // Constante entre aspas
alert(dec2)
Return

 

 

Essa função sempre irá criar um número decimal, mesmo que este estoure a precisão definida (por iPrecisao e iEscala), nessa situação uma mensagem de atenção será impressa no console (apenas em versões superiores a 7.00.131227A)

 

Local dec1Local dec2dec1 := DEC_CREATE("25.759",15,2)dec2 := DEC_CREATE(25.759,15,2)
Protheus 10 , TOTVS Application Server 10 , ByYou Application Server