ПОЧЕМУ ВЫБРАТЬ 123456.123456789123456 ОТ Dual;возвращает 123456.123457? - PullRequest
3 голосов
/ 13 июля 2010

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

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

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

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

Ответы [ 2 ]

6 голосов
/ 13 июля 2010

Ну, это не так.Но, как вы говорите, инструмент (например, 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 голосов
/ 13 июля 2010

Нет, определение (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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...