tft每日頭條

 > 生活

 > 保留尾數與四舍五入的區别

保留尾數與四舍五入的區别

生活 更新时间:2024-12-23 12:13:16

保留尾數與四舍五入的區别?應業務場景需求,需對結果值進一步處理,在此提供3種處理方式(Oracle),詳見附1,今天小編就來說說關于保留尾數與四舍五入的區别?下面更多詳細答案一起來看看吧!

保留尾數與四舍五入的區别(尾數處理01)1

保留尾數與四舍五入的區别

應業務場景需求,需對結果值進一步處理,在此提供3種處理方式(Oracle),詳見附1。

01:四舍五入。ROUND就可以解決。round(數值,保留位數);

02:舍尾,也就是截位。REUNC函數。trunc(數值,保留位數);

03:進位。CEIL函數。FLOOR函數。這個稍微有點不一樣,需要區分正數進位,或者負數進位。

正數進位:CEIL(V_PRICE*POWER(10,V_LENGTH))/POWER(10,V_LENGTH);

負數進位:FLOOR(V_PRICE*POWER(10,V_LENGTH))/POWER(10,V_LENGTH);

還有一個小思路,感興趣的可以玩玩。

負數進位:CEIL(ABS(數值)*POWER(10,保留位數))/POWER(10,保留位數)*數值/-數值

--附1

CREATE OR REPLACE FUNCTION FUN_ROUNDING(I_PRICE IN NUMBER, --數值

I_ROUNDING IN VARCHAR2,--尾數處理方式,

I_LENGTH IN NUMBER) --保留位數

RETURN NUMBER IS

/******************************************************************************

NAME: FUN_ROUNDING

PURPOSE: 尾數處理( 01 四舍五入

02 舍尾

03 進位 )

參數說明:

******************************************************************************/

V_ROUNDING VARCHAR2(2) ;

V_PRICE NUMBER(22,8);

V_LENGTH NUMBER(22,8);

V_SQL NUMBER(22,8);

O_ROUNDING NUMBER(22,8);

BEGIN

V_PRICE := I_PRICE;

V_ROUNDING := I_ROUNDING;

V_LENGTH := I_LENGTH;

--(四舍五入 截位 進位)

IF V_ROUNDING = '02'

THEN V_SQL := TRUNC(V_PRICE,V_LENGTH);--截位

ELSIF v_rounding = '03'

THEN

IF V_PRICE > 0

THEN V_SQL := CEIL(V_PRICE*POWER(10,V_LENGTH))/POWER(10,V_LENGTH); --正數進位

ELSIF V_PRICE < 0

THEN V_SQL := FLOOR(V_PRICE*POWER(10,V_LENGTH))/POWER(10,V_LENGTH); --負數進位

--THEN V_SQL := CEIL(ABS(V_PRICE)*POWER(10,V_LENGTH))/POWER(10,V_LENGTH)*V_PRICE/-V_PRICE; --負數進位

END IF;

ELSE V_SQL := ROUND(V_PRICE,V_LENGTH); --四舍五入

END IF;

-- 返回值

SELECT V_SQL INTO O_ROUNDING FROM DUAL;

RETURN O_ROUNDING;

END;

,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关生活资讯推荐

热门生活资讯推荐

网友关注

Copyright 2023-2024 - www.tftnews.com All Rights Reserved