2017-02-15 5 views

ответ

0

ROUND (numeric_expression, длина [функция])

SELECT ROUND(123.9994, 3), ROUND(123.9995, 3); 

Выход:

123,9990 124,0000

0

Вместо round(), использовать to_char() или cast() в десятичный тип:

select to_char(val, '999.9999'), 
     cast(val as decimal(10, 4)) 
0

You proba Блай хотите использовать to_char с required format:

Ниже округляет значение до 4 знаков после запятой и форматов в нужной строке:

Select to_char(123.50000065, '999999999990D9999') x from dual; 

Если вы не хотите, чтобы на самом деле вокруг числа т.е. вы просто хотите усечение после 4-х цифр, используйте:

Select to_char(trunc(123.50000065, 4), '999999999990D9999') x from dual; 
0

для управления форматом число предъявляется, вы можете преобразовать его в строку, применяя правильную маску формата.

В зависимости от того, как вам нужно вокруг вашей входного значения, один из них может быть полезно:

with test(x) as (
    select 123.50000065 from dual union all 
    select 123.00004 from dual union all 
    select 123.00005 from dual union all 
    select 123.00008 from dual 
) 
select x, 
     to_char(x, 'FM99999999.0000'), 
     to_char(trunc(x, 4), 'FM99999999.0000') 
from test ; 

результат:

      X TO_CHAR(X,'FM9 TO_CHAR(TRUNC(
-------------------------- -------------- -------------- 
      123,50000065000 123.5000  123.5000 
      123,00004000000 123.0000  123.0000 
      123,00005000000 123.0001  123.0000 
      123,00008000000 123.0001  123.0000 
0

"Округление" является математическое понятие. Значение (с вашим вводом образца) составляет 123,5. Математически 123.5000 - это то же самое, что и 123.5. Они отличаются только от STRINGS.

Один из способов отображения 123.5 как 123.5000 - обернуть round() в пределах to_char(). Однако это означает, что вы не можете использовать его в дальнейших вычислениях (на самом деле Oracle позволит вам это сделать - он будет делать неявное преобразование обратно в число вместо того, чтобы метать ошибку несоответствия типа данных, так как он должен do).

Лучшим способом, в большинстве случаев, является обращение к форматированию в вашем клиенте, например, SQL Developer, SQL * Plus или Toad. Вот как вы можете сделать это в SQL * Plus:

SQL> Select round (123.50000065 , 4) as result from dual; 

    RESULT 
---------- 
    123.5 

-- change the format of the numeric column "result" 

SQL> column result format 999.0000 

SQL> Select round (123.50000065 , 4) as result from dual; 

    RESULT 
--------- 
123.5000 
0

Я не могу видеть, как вы получили 123.5 из вашего запроса. мои результаты 123.50000000

Если я правильно понял, вы хотите, чтобы ваш номер 4 значительных десятичных знаков. почему бы не попробовать cast

select cast(123.50000065 as numeric(38,4)) 

выход: 123.5000

тестирование, если он округляет номер:

select cast(123.50000065 as numeric(38,6))

выход: 123.500001