|
fox
|
|||
---|---|---|---|
#18+
Доброе время суток! Кто нибудь сталкивался с таким: Есть таблица dbase3 в ней поле indt NUMERIC 15, 2 однака такой запрос SELECT SUM(indt), SUM(NTOM(indt)) FROM acc возвращает разные значения? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.08.2008, 10:57 |
|
fox
|
|||
---|---|---|---|
#18+
Colt76Доброе время суток! Кто нибудь сталкивался с таким: Есть таблица dbase3 в ней поле indt NUMERIC 15, 2 однака такой запрос SELECT SUM(indt), SUM(NTOM(indt)) FROM acc возвращает разные значения? Хочется при суммировании чисел разной точности получить одинаковый результат? На чем основано желание? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.08.2008, 11:00 |
|
fox
|
|||
---|---|---|---|
#18+
Да не, точность одинаковая оба sum по одному столбцу ... |
|||
:
Нравится:
Не нравится:
|
|||
13.08.2008, 11:02 |
|
fox
|
|||
---|---|---|---|
#18+
Дело в том, что я загрузил в эту таблицу данные из oracle, при проверке получилось что итоги разные в оркле и в dbf, такое впечатление что данные в таблице acc.dbf получились не с двумя знаками после запятой а больше или это fox както глючит, кстати vfp9.0 ... |
|||
:
Нравится:
Не нравится:
|
|||
13.08.2008, 11:10 |
|
fox
|
|||
---|---|---|---|
#18+
colt76Да не, точность одинаковая оба sum по одному столбцу Я вижу, что они подному столбцу. Но вот суммируются в запросе в первом случае имеющееся значение с имеющейся для данного типа точностью, а во втором сконвертированное в совершенно другой тип с совершенно другой точнностью. Разница понятна? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.08.2008, 11:17 |
|
fox
|
|||
---|---|---|---|
#18+
Ага разница вроде понятна, но стобец numeric с точностью 2 после запятой, после преобразования ntom разве меняет точность? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.08.2008, 11:21 |
|
fox
|
|||
---|---|---|---|
#18+
Colt76Ага разница вроде понятна, но стобец numeric с точностью 2 после запятой, после преобразования ntom разве меняет точность? Ну и вопросики... :) Столбец точность не меняет. У результата конвертации другая точность. Да, тип money имеет точность отличную от numeric. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.08.2008, 11:25 |
|
fox
|
|||
---|---|---|---|
#18+
Чот в натуре туплю. Но меня блин смущает что итоги разные в оракле и в получившемся дбф причем разница на копейки, чо делать? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.08.2008, 11:28 |
|
fox
|
|||
---|---|---|---|
#18+
Colt76Чот в натуре туплю. Но меня блин смущает что итоги разные в оракле и в получившемся дбф причем разница на копейки, чо делать? Итоги где разные? SUM(indt) != SUM(NTOM(indt)) или же SUM(indt) = SUM(NTOM(indt)) но не равно ораклу? Если indt N(15,2) то всегда indt = NTOM(indt), т.к. тип Currency 4 знака после запятой и никаких потерь при конвертации нет. Выполни для проверки: Код: plaintext
... |
|||
:
Нравится:
Не нравится:
|
|||
13.08.2008, 11:45 |
|
fox
|
|||
---|---|---|---|
#18+
SUM(indt) != oracle SUM(NTOM(indt)) = oracle скрипт выполнил получил в результате 9 строк ... |
|||
:
Нравится:
Не нравится:
|
|||
13.08.2008, 11:51 |
|
fox
|
|||
---|---|---|---|
#18+
Colt76SUM(indt) != oracle SUM(NTOM(indt)) = oracle скрипт выполнил получил в результате 9 строк А показать не догадался? Результат select выложи если на нем SUM(indt) != SUM(NTOM(indt)) или исходную дбфку ... |
|||
:
Нравится:
Не нравится:
|
|||
13.08.2008, 11:55 |
|
fox
|
|||
---|---|---|---|
#18+
Резкльтат положил, а вся таблица слишком большая зараза. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.08.2008, 11:58 |
|
fox
|
|||
---|---|---|---|
#18+
Colt76Резкльтат положил, а вся таблица слишком большая зараза. По твоей таблице: Код: plaintext
А дальше лажа какая-то начинается: Код: plaintext 1.
Тут все 9 записей Код: plaintext
Но не смотря на вышесказанное разной суммы не видно. Поэтому надо твою исходную таблицу смотреть. Если большая, то оставь в ней только поле indt и запакуй. Только проверь что по ней SUM(indt) и SUM(NTOM(indt)) на копейки расходятся. А какая из сумм точная не выяснил? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.08.2008, 12:26 |
|
fox
|
|||
---|---|---|---|
#18+
Еще мысль: N 15, 2 - это 12 знаков целого и 2 поле запятой Если SUM(indt) имеет 13 знаков целого, то младший разряд (единицы копеек) не влезут в N 15, 2 и округлятся. Ошибки никакой фокс при этом не даст. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.08.2008, 12:29 |
|
fox
|
|||
---|---|---|---|
#18+
Тип Currency - это целочисленный тип данных, который отображается как дробное число просто формально отделяя последние 4 знака запятой Тип Numeric в оперативной памяти , вероятно, хранится как Real. Т.е. на самом деле, количество знаков в этом числе всегда 16. Просто при отображении показывается фиксированное количество знаков после запятой. С автоматическим округлением. Это значит, что последняя цифра не обязательно такая и есть, как отображается. Может там бесконечные 9 в "хвосте". Простая проверка Код: plaintext 1. 2.
показывает, что сравнивать напрямую Numeric и Currency - нельзя. Их предварительно следует преобразовать к одному типу данных. Причем преобразование в тип Numeric обязательно следует обрамлять округлением Код: plaintext 1. 2. 3. 4. 5. 6.
Символ "$" говорит о том, что далее идет число типа Currency. Его использование аналогично явному преобразованию через функцию NTOM(). Как видите, первые 2 сравнения вернут .F., в то время как последние 2 - .T. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.08.2008, 13:38 |
|
|
start [/forum/topic.php?fid=41&fpage=150&tid=1587395]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
37ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
50ms |
get tp. blocked users: |
2ms |
others: | 11ms |
total: | 143ms |
0 / 0 |