2010-07-13 1 views
3

Почему SELECT 123456.123456789123456 FROM Dual;123456.123457?Почему SELECT 123456.123456789123456 FROM Dual; возвращает 123456.123457?

Как увеличить эту точность?

Я спрашиваю об этом, потому что я суммирую стоимость, определенную как NUMBER(38,20), и я могу заметить, что ошибки накапливаются, но поскольку эти числа представляют собой деньги, округление недопустимо.

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

ответ

6

Ну, это не так. Но, как вы говорите, инструмент (например, SQL Plus), который отображает результат может округлить его для отображения:

SQL> SELECT 123456.123456789123456 n from dual; 

     N 
---------- 
123456.123 

SQL> column n format 9999999999.99999999999999999999999999999 
SQL> SELECT 123456.123456789123456 n from dual; 

             N 
----------------------------------------- 
    123456.12345678912345600000000000000 

Здесь SQL Plus округляется до 3 знаков после запятой, прежде чем я указал маску формата.

Что касается вашего отчета, который, по-видимому, округляет данные, которые он суммирует, мы, вероятно, должны увидеть пример данных SQL и ввода/вывода.

2

Нет, (38,20) определение столбца не должно влиять на номер:

SQL> create table test (x number(38,20)); 

Table created. 

SQL> insert into test values (123456.123456789123456); 

1 row created. 

SQL> commit; 

Commit complete. 

SQL> select x - 123456.123456789123456 from test; 

X-123456.123456789123456 
------------------------ 
       0 

Если вы обрабатываете число вне базы данных вы можете накапливать ошибки там.

+0

Нет, я обрабатываю их внутри базы данных, с запросом, который выполняет SUM –

Смежные вопросы