2012-12-04 4 views

답변

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

. 예를 들어'select round (.1348, -2) from dual;은 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

d는 유효 숫자의 개수 ROUND(x, d - FLOOR(LOG(10, x)) - 1)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

이것은 '3.00'이 두세 개의 시그마 무화과로는 효과가없는 것 같습니다. – alaybourn