Fórum UDF PARA ARREDONDAMENTO RETONANDO NULL #60422
25/01/2009
0
No delphi criei a dll usando um algoritmo que encontrei na internet:
library Arredondar;
uses
SysUtils,
Classes;
{$R *.res}
function Arredondando(Valor: Double; Dec: Integer): Double; cdecl; export;
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;
exports Arredondando;
begin
Randomize;
end.
No firebird criei a função:
DECLARE EXTERNAL FUNCTION ARREDONDANDO
NUMERIC(15,
2),
SMALLINT
RETURNS NUMERIC(15,2)
ENTRY_POINT ´Arredondando´ MODULE_NAME ´Arredondar´;
E testo usando os seguintes comandos:
Select
arredondando (5.52,2)
from rdb$database
E porquer o retorno só é null?
Alguém pode mim ajudar:
adelmojunior1@hotmail.com
library Arredondar;
uses
SysUtils,
Classes;
{$R *.res}
function Arredondando(Valor: Double; Dec: Integer): Double; cdecl; export;
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;
exports Arredondando;
begin
Randomize;
end.
No firebird criei a função:
DECLARE EXTERNAL FUNCTION ARREDONDANDO
NUMERIC(15,
2),
SMALLINT
RETURNS NUMERIC(15,2)
ENTRY_POINT ´Arredondando´ MODULE_NAME ´Arredondar´;
E testo usando os seguintes comandos:
Select
arredondando (5.52,2)
from rdb$database
E porquer o retorno só é null?
Alguém pode mim ajudar:
adelmojunior1@hotmail.com
Adelmo_junior
Curtir tópico
+ 0
Responder
Posts
26/01/2009
Webjoel
Olá!
Usar udfs no firebird ou em qualquer banco é se grande ajuda e também perigoso, o correto é usar soment em último caso e se usar tente usar alguma do FreeAdhocUDF, quem tem uma infinidade de udf para vários casos que o banco as vezes não possui solução.
Mas no seu caso existe uma solução fácil e sem udf,
segue abaixo o código:
Este select irá te retornar 10.22. Você pode usar o ´cast´ de muitas outras maneiras, com datas, strings, etc.
Boa sorte!
Usar udfs no firebird ou em qualquer banco é se grande ajuda e também perigoso, o correto é usar soment em último caso e se usar tente usar alguma do FreeAdhocUDF, quem tem uma infinidade de udf para vários casos que o banco as vezes não possui solução.
Mas no seu caso existe uma solução fácil e sem udf,
segue abaixo o código:
select cast(10.215 as decimal(15,2)) from rdb$database
Este select irá te retornar 10.22. Você pode usar o ´cast´ de muitas outras maneiras, com datas, strings, etc.
Boa sorte!
Responder
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)