UDF PARA ARREDONDAMENTO RETONANDO NULL

Firebird

25/01/2009

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


Adelmo_junior

Adelmo_junior

Curtidas 0

Respostas

Webjoel

Webjoel

25/01/2009

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:

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!


GOSTEI 0
POSTAR