powered by simpleCommunicator - 2.0.41     © 2025 Programmizd 02
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Округление при суммированиии в SELECT
8 сообщений из 8, страница 1 из 1
Округление при суммированиии в SELECT
    #38959447
Eugene7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Обычный SELECT к DBF. Все поля нумерик с 3 знаками после запятой. Но если выполняю суммирование типа:
SELECT SUM(field) from table INTO ARRAY arr
то получаю число, округленное до 2-х знаков.

SET DECIMALS TO 3 стоит.

Round(SUM(field),3) не помогает. Видимо округление происходит при самом суммировании. Как избавится от этого округления? Или хотя-бы сделать его до 3-х знаков.
...
Рейтинг: 0 / 0
Округление при суммированиии в SELECT
    #38959461
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тип field полностью какой? N(???, 3)
Сколько знаков в итоговом результате?

Попробуй
Код: sql
1.
SELECT SUM(cast(field as N(16,3))) as field ...
...
Рейтинг: 0 / 0
Округление при суммированиии в SELECT
    #38959467
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если сумму надо, то не обязательно SELECT делать. Есть команды специальные SUM, COUNT, CALC
Код: sql
1.
2.
3.
sele table
sum field to lnSum
? lnSum
...
Рейтинг: 0 / 0
Округление при суммированиии в SELECT
    #38959473
Eugene7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тип field N(10,3)
В итоговом результате 3 дробных знака. Но последний знак округлен
Должно получится 1024.543, а округляется до 1024.540

Причем если я произвожу обычное суммирование не в SELECT, то получаю 1024.543
А вот селект упорно выдает 1024.540

К сожалению в данном случае уйти от SELECT я не могу

Программа не моя, но мне приходится поддерживать. Даже если там все переделать, что-бы уйти от SELECT, все равно интересно - я никак не могу производить суммирование в селекте, что-бы 3-ий знак после запятой не округлялся?
...
Рейтинг: 0 / 0
Округление при суммированиии в SELECT
    #38959487
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
это не помогло?
Код: sql
1.
SELECT SUM(cast(field as N(16,3))) as field ...



У меня не получается твою проблему повторить, запусти у себя
Код: sql
1.
2.
3.
4.
5.
6.
7.
create cursor t1 (f1 n(10, 3))
insert into t1 values(1234.456)
insert into t1 values(234.567)
insert into t1 values(345.678)

select sum(f1) from t1 into array arr
? arr[1] && 1814.701


SET DECIMALS тоже не должно влиять, т.к. это точность при выводе, а не расчете.

Ошибка странная и нестандартная. Надо пример повторяющий ошибку, чтобы можно было потестить у себя. В виде кода или DBF-ки с конкретными числами.

Как вариант: может дальше в коде округляется? Поставь после селекта
Код: sql
1.
messagebox(arr[1])
...
Рейтинг: 0 / 0
Округление при суммированиии в SELECT
    #38959538
SoftwareBoy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Eugene7,

Округление для отображения чисел может устанавливать команда SET SYSFORMATS ON, если выполняется после SET DECIMALS.
Команды SET DECIMALS, SET FIXED, SET SYSFORMATS влияют только на отображение числовых значений, значения переменных не изменяются.
...
Рейтинг: 0 / 0
Округление при суммированиии в SELECT
    #38959578
Eugene7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо всем за помощь
Оказалось, что точка тоже занимает 1 знак. Т.е. в N(7,3) один из 7 знаков займет точка. Писалось в ячейку с N(7,3) размером, где последняя цифра просто срезалась. А потом попадало обратно в N(10,3), где последняя цифра становилась равна нулю.
Вот такие подводные камни :)
...
Рейтинг: 0 / 0
Округление при суммированиии в SELECT
    #38959592
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Eugene7Оказалось, что точка тоже занимает 1 знак. Т.е. в N(7,3) один из 7 знаков займет точка.
Так и есть, еще знак один разряд займет (для отрицательных).
При переполнении происходит округление младших разрядов после запятой.
т.е. в N(7,3) влезет от -999999 до 9999999

Именно поэтому я спрашивал про разрядность.
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Округление при суммированиии в SELECT
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]