oracle转换数字格式,oracle 百分比格式转换/千分位格式化数据

CREATE OR REPLACE PACKAGE BODY pk_pub IS     ---------------------------------------------------------------------------------------     -- 英文名称:    fmt_percent     -- 模块功能:    百分比格式转换     -- 备    注:    1、将数值型变量格式化为百分比形式并保留规定位数的小数,形如'99.99%'     ---------------------------------------------------------------------------------------     FUNCTION fn_fmt_percent     (         i_value IN NUMBER, --需要格式化的数值         i_len   IN NUMBER DEFAULT 2 --要保留的小数位数     ) RETURN VARCHAR2 IS         v_num NUMBER;         v_rvalue VARCHAR2(100);     BEGIN         v_num := nvl(i_value, 0);             v_rvalue := round(v_num * 100, i_len) || '%';             IF substr(v_rvalue, 1, 1) = '.' THEN             v_rvalue := '0' || v_rvalue;         ELSIF substr(v_rvalue, 1, 2) = '-.' THEN             v_rvalue := '-0' || substr(v_rvalue, 2);         END IF;             RETURN v_rvalue;     END fn_fmt_percent;     /*     *重载     */     FUNCTION fn_fmt_percent     (         i_value IN VARCHAR2, --需要格式化的数值         i_len   IN NUMBER DEFAULT 2 --要保留的小数位数     ) RETURN VARCHAR2 IS         v_num NUMBER;         v_rvalue VARCHAR2(100);     BEGIN         IF i_value = '-' THEN             RETURN '-';         ELSIF i_value IS NULL THEN             RETURN '0%';         ELSE             v_num := nvl(to_number(i_value), 0);         END IF;             v_rvalue := round(v_num * 100, i_len) || '%';                 IF substr(v_rvalue, 1, 1) = '.' THEN             v_rvalue := '0' || v_rvalue;         ELSIF substr(v_rvalue, 1, 2) = '-.' THEN             v_rvalue := '-0' || substr(v_rvalue, 2);         END IF;             RETURN v_rvalue;     END fn_fmt_percent;     ---------------------------------------------------------------------------------------     -- 英文名称:    fmt_number     -- 模块功能:    按保留小数位数、千分位、显示单位(亿元、万元)格式化数据     -- 备    注:    1、将数值型变量格式化为带千分位并保留规定位数的小数, 形如'9,999,999.99'     ---------------------------------------------------------------------------------------     FUNCTION fn_fmt_number     (         i_value IN NUMBER, --需要格式化的数值         i_len   IN NUMBER DEFAULT 2, --要保留的小数位数         i_unit  IN NUMBER DEFAULT 0 --显示的单位,万元为10,000;百万为1,000,000,依次类推     ) RETURN VARCHAR2 IS         v_num NUMBER;         v_numi VARCHAR2(100);         v_numd VARCHAR2(100);         v_len NUMBER;         v_unit NUMBER;         v_dot NUMBER;     BEGIN         v_num := nvl(i_value, 0);         v_len := i_len;         v_unit := i_unit;             --然后四舍五入         IF v_unit = 0 THEN             v_num := round(v_num, v_len);         ELSE             v_num := round(v_num / v_unit, v_len);         END IF;             --判断是否包含小数部分         v_dot := instr(v_num, '.');         IF v_dot = 0 THEN             v_dot := lengthb(v_num) + 1;         END IF;         IF abs(v_num) >= 1 THEN             --取得整数部分,然后格式化成999,999,999,999,             v_numi := to_char(substr(v_num, 1, v_dot),                               '9,999,999,999,999,999,999');         ELSIF v_num < 0 THEN             v_numi := '-0';         ELSE             v_numi := '0';         END IF;             --取得小数部分         v_numd := to_char(substr(v_num, v_dot));         --整数和小数部分拼接         RETURN nvl(TRIM(v_numi || v_numd), 0);     EXCEPTION         WHEN OTHERS THEN             RETURN '';     END fn_fmt_number;     END pk_pub;

你可能感兴趣的:(oracle转换数字格式)