/* 暫定版 */ CREATE OR REPLACE PACKAGE XT_MATH IS -- PI CONSTANT NUMBER := 3.1415926535897932384626433832795028841971; PI CONSTANT NUMBER := 3.1415; -- ROUND FUNCTION ROUNDUP( P_NUM IN NUMBER, P_PLACE IN INTEGER := 0 ) RETURN NUMBER; END; / CREATE OR REPLACE PACKAGE BODY XT_MATH IS FUNCTION ROUNDUP( P_NUM IN NUMBER, P_PLACE IN INTEGER := 0 ) RETURN NUMBER IS vBase NUMBER; BEGIN vBase := 10 ** P_PLACE ; RETURN CEIL(ABS(P_NUM) * vBase) / vBase * SIGN(P_NUM); END; FUNCTION TRUNC_MOD( P_NUM IN NUMBER, P_PLACE IN INTEGER := 0 ) RETURN NUMBER IS BEGIN RETURN MOD(P_NUM, 10**P_PLACE); END; -- 進数変換 FUNCTION HEXTODECIMAL( P_HEX IN VARCHAR2 ) RETURN NATURAL IS BEGIN RETURN UTL_RAW.CAST_TO_BINARY_INTEGER(HEXTORAW(P_HEX)); END; FUNCTION HEXTODECIMAL2( P_HEX IN VARCHAR2 ) RETURN NUMBER IS vHexString VARCHAR2(16); vHexChar CHAR(1 CHAR); vDigit NUMBER; vDecimal NUMBER; BEGIN vDecimal := 0; vHexString := UPPER(LTRIM(P_HEX,'0')); FOR i IN 1 .. LENGTH(vHexString) LOOP vHexChar := SUBSTR(vHexString, i, 1); CASE vHexChar WHEN 'A' THEN vDigit := 10; WHEN 'B' THEN vDigit := 11; WHEN 'C' THEN vDigit := 12; WHEN 'D' THEN vDigit := 13; WHEN 'E' THEN vDigit := 14; WHEN 'F' THEN vDigit := 15; ELSE vDigit := TO_NUMBER(vHexChar); END CASE; vDecimal := 16 * vDecimal + vDigit; END LOOP; RETURN vDecimal; EXCEPTION WHEN OTHERS THEN RETURN 0; END; FUNCTION DECIMALTOHEX( P_DEC IN NUMBER ) RETURN VARCHAR2 IS BEGIN RETURN TO_CHAR(P_DEC,'FMXXXXXXXXXXXXXXXX'); END; END; /