powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / запрос неправильно считает...
22 сообщений из 47, страница 2 из 2
запрос неправильно считает...
    #32940612
AleksMed
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати, help123 с моим вариантом согласился, а ведь он то же на отрицательных числах ведет себя не правильно.
Так что leaf рулит.
...
Рейтинг: 0 / 0
запрос неправильно считает...
    #32941469
Urri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И то верно ;-)
Это моя практика виновата: ну не бывает у меня отрицательных чисел в повседневной работе. ;-) Кстати, я пользуюсь по-старинке типом numeric. ;-)))
...
Рейтинг: 0 / 0
запрос неправильно считает...
    #32941691
Фотография help123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AleksMedКстати, help123 с моим вариантом согласился, а ведь он то же на отрицательных числах ведет себя не правильно.
Так что leaf рулит. Да действительно - ошибочка вышла
Написал функцию:
Код: plaintext
1.
2.
3.
4.
5.
FUNCTION myINT
  LPARAMETERS myvar
  PRIVATE retvar AS Double
  retvar=ROUND(INT(myvar* 100 )/ 100 , 2 )
  RETURN retvar
ENDFUNC
А потом делаю Rule's для записей в таблицах:
Код: plaintext
1.
2.
3.
FUNCTION ruleMparent
IF myINT(mparent.tariff)!=mparent.tariff
	REPLACE mparent.tariff WITH myINT(mparent.tariff)
ENDIF
Всем спасибо... ато пролетел бы еще и второй раз ...
...
Рейтинг: 0 / 0
запрос неправильно считает...
    #32941751
AleksMed
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
retvar=ROUND(INT(myvar* 100 )/ 100 , 2 )
А чем обусловлено применение ROUND? Неужели при DOUBLE появляется мусор при делении?
...
Рейтинг: 0 / 0
запрос неправильно считает...
    #32942170
Фотография help123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AleksMed
Код: plaintext
retvar=ROUND(INT(myvar* 100 )/ 100 , 2 )
А чем обусловлено применение ROUND? Неужели при DOUBLE появляется мусор при делении? Да мусор там уже никак не может появится.
А написал потому что без Round число имеет формат ХХ.ХХ00 вместо ХХ.ХХ,-тоесть лишних два нуля откуда-то берутся. А у меня формат поля в таблице с двума нулями, а не с четырмя
Просто перестраховался
...
Рейтинг: 0 / 0
запрос неправильно считает...
    #32942206
AleksMed
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
help123Просто перестраховался
Лучше перебдеть, чем недобдеть!
...
Рейтинг: 0 / 0
запрос неправильно считает...
    #32942567
Igor Korolyov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hi help123!

> А написал потому что без Round число имеет формат ХХ.ХХ00 вместо
> ХХ.ХХ,-тоесть лишних два нуля откуда-то берутся. А у меня формат поля в
> таблице с двума нулями, а не с четырмя

Это не имеет значения - просто фокс наряду с собственно числом внутри себя
(в памяти) хранит ещё и "формат отображения" - от того и бывает иногда что ?
ln1 показывает 12 а ? ln1*100 показывает например 1234 :)
Однако в собственно таблице формат НЕ сохраняется - он автоматом
"вынимается" из залоговка таблицы - как раз для Float (2) это и привело к
описанной проблеме - мы "не видим" часть числа, т.к. применённый к нему
формат отображения отрезал это :)

P.S. Ещё сложнее дело обстоит при математических вычислениях - дело в том,
что помимо вычисления собственно чисел, ещё проводятся и кой какие
вычисления с этими форматами - от того в частности и получается что
INT(myvar*100)/100 даёт 4 знака при отображении (хотя 2 младших всегда 0) :)
Для прикола ещё такой код можно проверить: ? (INT(0.12*100)+0.000000)/100 -
как говорится результат на лице :)

Posted via ActualForum NNTP Server 1.1
...
Рейтинг: 0 / 0
запрос неправильно считает...
    #32942644
w3d
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Igor Korolyov
? (INT(0.12*100)+0.000000)/100 -
как говорится результат на лице :)


у меня получилось 0.120000
а что еще должно быть?
...
Рейтинг: 0 / 0
запрос неправильно считает...
    #32942759
Фотография help123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AleksMedЛучше перебдеть, чем недобдеть! Это точно
Igor KorolyovОднако в собственно таблице формат НЕ сохраняется - он автоматом "вынимается" из залоговка таблицы - как раз для Float (2) это и привело к описанной проблеме - мы "не видим" часть числа, т.к. применённый к нему формат отображения отрезал это :)Да... чесно говоря неожидал я вот такой вот подлости от Фокса... Что-что.. а когда ты ему говоришь считать одно.. а он считает что-то другое... Короче: база уже написана... данные введены.. и тут по всем поставщикам правильно считает... а по одному 6 гривен не идет и данные то все правильные... я чуть не припух вычисляя почему так...
...
Рейтинг: 0 / 0
запрос неправильно считает...
    #32943012
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
help123Да... чесно говоря неожидал я вот такой вот подлости от Фокса... Что-что.. а когда ты ему говоришь считать одно.. а он считает что-то другое... Короче: база уже написана... данные введены.. и тут по всем поставщикам правильно считает... а по одному 6 гривен не идет и данные то все правильные... я чуть не припух вычисляя почему так...
А потому что не надо было экспериментировать с типами данных! На... (в смысле, "зачем") ты использовал тип Double? Экономии захотелось? Ну, так надо точно знать, к чему это может привести. Точнее, как физически храняться такие типы данных и какие особенности по их использованию.

Если бы использовал старые типы Numeric или Float такой проблемы в принципе не возникло бы! Хотя, конечно, они физически больше места занимают.

Странно, что для хранения денежных сумм ты использовал Double, а не Currency. Хотя с Currency еще больше проблем.
...
Рейтинг: 0 / 0
запрос неправильно считает...
    #32943186
Фотография help123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВладимирМА потому что не надо было экспериментировать с типами данных! На... (в смысле, "зачем") ты использовал тип Double? Экономии захотелось? Ну, так надо точно знать, к чему это может привести. А я и незнал к чему это может привести...
ВладимирМТочнее, как физически храняться такие типы данных и какие особенности по их использованию. Тоже ничего незнаю о этих особенностях...
ВладимирМ Если бы использовал старые типы Numeric или Float такой проблемы в принципе не возникло бы! Хотя, конечно, они физически больше места занимают. Убедили, все данные Double перевел в Numeric(20,2). Вроди ничего не изменилось...
ВладимирМСтранно, что для хранения денежных сумм ты использовал Double, а не Currency. Хотя с Currency еще больше проблем. Вот-вот даже пробовать Currency не хочу. Денежные суммы у меня теперь тоже в Numeric(20,2)

А вот теперь такой офф-топик: у меня чего-то в репорте в ячейке данные начали выводится звездочками. В ячейке формат стоит: Numeric, 99 999. И вроди число из запроса туда подается округленное - Round(xxx.xxxx,0). Ростягивал ячейку на весь экран, убирал формат, что только не делал - все равно звездочки... Притом интересно то, что когда я беру репорт за предыдущий месяц... то данные выводятся... а за этот - звездочки... ЧТО ДЕЛАТЬ
...
Рейтинг: 0 / 0
запрос неправильно считает...
    #32943223
Urri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
help123А вот теперь такой офф-топик: у меня чего-то в репорте в ячейке данные начали выводится звездочками. В ячейке формат стоит: Numeric, 99 999. И вроди число из запроса туда подается округленное - Round(xxx.xxxx,0). Ростягивал ячейку на весь экран, убирал формат, что только не делал - все равно звездочки... Притом интересно то, что когда я беру репорт за предыдущий месяц... то данные выводятся... а за этот - звездочки... ЧТО ДЕЛАТЬ
Звездочки появляются, если целая часть числа не помещается в формат. Например, у тебя формат 999 999, а число, которое в этот формат надо запихнуть, - милиион и более.
...
Рейтинг: 0 / 0
запрос неправильно считает...
    #32943248
Urri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Или менее чем -100000 ;-)))
...
Рейтинг: 0 / 0
запрос неправильно считает...
    #32943261
Фотография help123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
UrriИли менее чем -100000 ;-))) Перевел поле в буквенный тип и написал - str(rs.recv1,60,2),- все равно звездочки.... а число там скорее всего подставляется 53...
...
Рейтинг: 0 / 0
запрос неправильно считает...
    #32943282
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
help123А вот теперь такой офф-топик: у меня чего-то в репорте в ячейке данные начали выводится звездочками. В ячейке формат стоит: Numeric, 99 999. И вроди число из запроса туда подается округленное - Round(xxx.xxxx,0). Ростягивал ячейку на весь экран, убирал формат, что только не делал - все равно звездочки... Притом интересно то, что когда я беру репорт за предыдущий месяц... то данные выводятся... а за этот - звездочки... ЧТО ДЕЛАТЬ
Звездочки появляются в случае переполнения. А переполнение может быть:

1) В самих исходных данных! Т.е. в результате конвертации типа данных из Double в Numeric где-то произошло переполнение типа Numeric! Сделай поиск по таблице таких записей

Код: plaintext
1.
select mparent
LOCATE FOR NOT BETWEEN(tariff, 1 - 10 ** 19 , 10 ** 20 - 1 )

2) Значение поля больше чем указанный формат. Т.е. в твоем случае ты предпологаешь, что значение поля не превышет 100 тысяч (5 цифр)

3) Объект печати меньше по ширине, чем само значение.

Последние 2 пункта ты уже проверил. Значит, остается только ошибка самих исходных данных.
...
Рейтинг: 0 / 0
запрос неправильно считает...
    #32943785
Фотография help123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ошибка была в самом запросе... в использовании функции NVL():
NVL(mparent.tariff,0)
заменил на:
NVL(mparent.tariff,0.00)
и все заработало... забыл что у меня два знака после запятой.
Хотя такой прикол с NVL - меня удивил... и почему так - я так и не понял...
Вычислил чисто методом научного втыка...
...
Рейтинг: 0 / 0
запрос неправильно считает...
    #32943804
AleksMed
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
help123Ошибка была в самом запросе... в использовании функции NVL():
NVL(mparent.tariff,0)
заменил на:
NVL(mparent.tariff,0.00)
и все заработало... забыл что у меня два знака после запятой.
Хотя такой прикол с NVL - меня удивил... и почему так - я так и не понял...
Вычислил чисто методом научного втыка...

Так у тебя при 0.00 должны и перед запятой знаки теряться.
...
Рейтинг: 0 / 0
запрос неправильно считает...
    #32943829
Фотография help123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AleksMedТак у тебя при 0.00 должны и перед запятой знаки теряться. А почему??? Вы имеете ввиду что нужно писать 00000000.00
...
Рейтинг: 0 / 0
запрос неправильно считает...
    #32943857
AleksMed
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
help123 AleksMedТак у тебя при 0.00 должны и перед запятой знаки теряться. А почему??? Вы имеете ввиду что нужно писать 00000000.00

Ага. А что бы не заморачиваться сколько нулей до, а сколько после запятой ставить пишу NVL(<FldName1>,<FldName2>-<FldName2>), где <FldName2> - поле подходящее по формату для <FldName1> и точно не содержащее NULL при выборке.
...
Рейтинг: 0 / 0
запрос неправильно считает...
    #32945090
Igor Korolyov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hi help123!

А как ты думаешь фокс догадаеться какого размера поле сделать???
Хорошо в VFP9 добавили CAST, а до того именно через "шаблонные" 000.000 и
приходилось работать...
P.S. Он бы правильно догадался, если бы NULL-ов не было - а так видимо
первой записью он NULL встретил, посмотрел что тогда поле содержит 0 и
сделал поле типа N(1) - вот прочие записи и не влезли :)

Posted via ActualForum NNTP Server 1.1
...
Рейтинг: 0 / 0
запрос неправильно считает...
    #32945289
Фотография help123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Igor Korolyovа так видимо первой записью он NULL встретил, посмотрел что тогда поле содержит 0 и сделал поле типа N(1) - вот прочие записи и не влезли :) Я СНИМАЮ ПЕРЕД ВАМИ ШЛЯПУ... ИМЕННО В ПЕРВОЙ ЗАПИСИ ОН NULL И ВСТРЕТИЛ...
...
Рейтинг: 0 / 0
запрос неправильно считает...
    #32948846
Igor Korolyov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hi help123!

Вообще-то предсказать какую именно запись фоксовый движок посчитает нужным
обрабатывать первой (точнее ПЕРЕД первой, на этапе определения структуры
будущего курсора) весьма сложно - он всё-же не настолько прямолинеен, чтобы
всегда брать первую физически запись, хотя зачастую это так и есть.

Posted via ActualForum NNTP Server 1.1
...
Рейтинг: 0 / 0
22 сообщений из 47, страница 2 из 2
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / запрос неправильно считает...
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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