2012-12-04 43 views

回答

1
select round(1348,-2) from dual; 
+3

,對他的一個例子的作品,但不是一般的。例如,'從double選擇round(.1348,-2);'返回0,但他可能需要0.13。 –

+0

@jonearles是否有更通用的解決方案?謝謝 – dewijones92

+0

現在,這是一個更有趣的問題。在這裏找到一些相關的討論:https://forums.oracle.com/forums/thread.jspa?threadID=295697&messageID=2848061 – ivanatpr

1

只是把我的頭頂部,可能是一個有待進一步優化:)

16:54:16 [email protected]> select to_number(to_char(1278, '9.9EEEE')) t from dual; 

     T 
---------- 
     1300 

Elapsed: 00:00:00.01 
16:54:34 [email protected]> select to_number(to_char(.1234, '9.9EEEE')) t from dual; 

     T 
---------- 
     .12 

Elapsed: 00:00:00.01 
3

嘗試ROUND(x, d - FLOOR(LOG(10, x)) - 1)其中d是顯著的位數和x是要舍入的值。

例子:

SELECT 
    ROUND(x, d - FLOOR(LOG(10, x)) - 1) 
FROM (SELECT 1278 x, 2 d FROM DUAL UNION ALL 
     SELECT 0.1234 x, 2 d FROM DUAL ); 
+1

添加「ABS」以允許它爲負值工作:... LOG(10,ABS( x))... –

+0

對於兩個或三個sig figs,'3.00'似乎不起作用。 – alaybourn