powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / запрос неправильно считает...
25 сообщений из 47, страница 1 из 2
запрос неправильно считает...
    #32938461
Фотография help123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mchild.bprice = 733.33
mchild.clearw = 49.85
Пишу в поле запроса (mchild.bprice*mchild.clearw) AS xxx
получается 36557,1238 - тоесть неправильно.
(если посчитать на калькуляторе-то 36556,5005)
Что за ерунда... уже все перепробовал...
Что самое интересное, что в окне Фокса и из программы непосредственно
если писать напрямую ?733.33*49.85=36556,5005 - тоесть правильно.
Люди помогите... ато с ума схожу....
...
Рейтинг: 0 / 0
запрос неправильно считает...
    #32938487
AleksMed
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А поля mchild.bprice и mchild.clearw какой точности?
И если из командного окна дать ?mchild.bprice * mchild.clearw, то что получается?
...
Рейтинг: 0 / 0
запрос неправильно считает...
    #32938520
golsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А в базе не болтается третий знак после запятой? Может
mchild.bprice = 733.33
mchild.clearw = 49.85
это только округленные до второго знака цифири?
...
Рейтинг: 0 / 0
запрос неправильно считает...
    #32938551
Фотография help123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AleksMedА поля mchild.bprice и mchild.clearw какой точности?
И если из командного окна дать ?mchild.bprice * mchild.clearw, то что получается? делаю в окне Фокса:
SELECT mchild
GO 60 (это считается в строке под номером 60)
?mchild.bprice (результат=733,33)
?mchild.clearw (результат=49,85)
?mchild.bprice*mchild.clearw (результат=36557,1238)

поля mchild.bprice и mchild.clearw - тип double: with-8,decimal-2
...
Рейтинг: 0 / 0
запрос неправильно считает...
    #32938612
Urri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В худшем случае может получиться и 36560.4164249999

Попробуй

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
SELECT mchild
GO  60  &&(это считается в строке под номером  60 )
?mchild.bprice &&(результат= 733 , 33 )
?mchild.clearw &&(результат= 49 , 85 )
?mchild.bprice*mchild.clearw &&(результат= 36557 , 1238 )
?str(mchild.bprice, 15 , 7 )
?str(mchild.clearw, 15 , 7 )
...
Рейтинг: 0 / 0
запрос неправильно считает...
    #32938716
Фотография help123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
UrriВ худшем случае может получиться и 36560.4164249999
Попробуй
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
SELECT mchild
GO  60  &&(это считается в строке под номером  60 )
?mchild.bprice &&(результат= 733 , 33 )
?mchild.clearw &&(результат= 49 , 85 )
?mchild.bprice*mchild.clearw &&(результат= 36557 , 1238 )
?str(mchild.bprice, 15 , 7 )
?str(mchild.clearw, 15 , 7 )
Ну и что:
?str(mchild.bprice,15,7) - результат 733,3300000
?str(mchild.clearw,15,7) - результат 49,8508500 (а почему не 49,8500000???)
И что мне делать дальше.....
Может какието настройки....
...
Рейтинг: 0 / 0
запрос неправильно считает...
    #32938744
Фотография help123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Конечно если сделать так:
(ROUND(mchild.bprice,2)*ROUND(mchild.clearw,2)) AS xxx
то получается заветное 36556,5005
НО КАКОГО ФИГА... ЕСЛИ У МЕНЯ В ТАБЛИЦЕ В ПОЛЯХ И ТАК 2 ЦЫФРЫ
ПОСЛЕ ЗАПЯТОЙ... НЕ БОЛЬШЕ...
ЭТО МНЕ ЧТО ТЕПЕРЬ 20 ЗАПРОСОВ ПЕРЕПИСЫВАТЬ...
...
Рейтинг: 0 / 0
запрос неправильно считает...
    #32938816
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тип Double физически храниться не так как "обычные" данные. В твоем случае некорректны сами исходные данные.

?str(mchild.clearw,15,7) - результат 49,8508500

Вот это и причина. Физически храниться именно указанное значение, а отображается значение 49,85. Если ты перемножишь:

?733.33*49.85085

То и получишь "странное" значение 36557,1238

Т.е. необходимо скорректировать исходные данные . Ошибка именно в них, а вовсе не в каких-то настройках FoxPro.

Либо дай напрямую команду вроде:

Код: plaintext
1.
2.
SELECT mchild
REPLACE ALL mchild.bprice WITH ROUND(mchild.bprice, 2 ), ;
	mchild.clearw WITH ROUND(mchild.clearw, 2 )

Либо замени тип Double на тип Numeric(20,2)
...
Рейтинг: 0 / 0
запрос неправильно считает...
    #32938894
Фотография help123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВладимирМТип Double физически храниться не так как "обычные" данные. В твоем случае некорректны сами исходные данные.
?str(mchild.clearw,15,7) - результат 49,8508500
Вот это и причина. Физически храниться именно указанное значение, а отображается значение 49,85. Если ты перемножишь:
?733.33*49.85085
То и получишь "странное" значение 36557,1238
Т.е. необходимо скорректировать исходные данные . Ошибка именно в них, а вовсе не в каких-то настройках FoxPro.
Либо дай напрямую команду вроде:
Код: plaintext
1.
2.
SELECT mchild
REPLACE ALL mchild.bprice WITH ROUND(mchild.bprice, 2 ), ;
	mchild.clearw WITH ROUND(mchild.clearw, 2 )
Либо замени тип Double на тип Numeric(20,2)
Да, наверное так оно и есть... но немогу понять как оно туда попало вот такое вот значение... и самое главное... как избежать попадания таких чисел...
У меня данные в эти поля вводятся в грид.. (текстбокс в ячейке по умолчанию).
Тоесть может как то програмно задать для этих текстбоксов маску ввода 99.99 ??? Это поможет???Или как то эще можно сделать....???
...
Рейтинг: 0 / 0
запрос неправильно считает...
    #32938955
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно создать RULE (правило) на уровне записи.

Дело в том, что FORMAT (или InputMask) в TextBox и контролирует только процесс ввода через этот TextBox. При программной модификации он уже не при чем.

В принципе, можно, конечно, сделать и Format (InputMask) в свойствах таблицы. Но эти настройки могут быть перекрыты настройками в объектах формы.

Т.е. по большому счету Format и InputMask - это рекомендательные свойства. Далеко не всегда обязательные к исполнению.

А вот RULE - ничем не перекроешь. Т.е. пишешь в нем что-то вроде:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
FUNCTION MyRule
IF ROUND(bprice, 2 )<>bprice
	REPLACE bprice WITH ROUND(bprice, 2 )
ENDIF
IF ROUND(clearw, 2 )<>clearw 
	REPLACE clearw WITH ROUND(clearw, 2 )
ENDIF
ENDFUNC

Еще раз. Это RULE не уровня конкретного поля (там будет запрет на модификацию), а уровня записи.
...
Рейтинг: 0 / 0
запрос неправильно считает...
    #32938980
Фотография help123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем спасибо... Легче стало как-то на душе после понимания проблемы..
Теперь будем эту проблему исправлять...
...
Рейтинг: 0 / 0
запрос неправильно считает...
    #32939465
Фотография help123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще такой вопрос напрашивается:
а как не округлить, а отсечь все знаки в цифре начиная после третего знака после запятой.
Например нужно ввести число 55,33
Ошибочно будет введено 55,336000
ведь ROUND(55,336000,2) в этом случае вернет 55,34, а мне нужно 55,33
...
Рейтинг: 0 / 0
запрос неправильно считает...
    #32939514
AleksMed
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
?55.336-MOD(55.336,0.01)
...
Рейтинг: 0 / 0
запрос неправильно считает...
    #32939521
leaf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
=int(a*100)/100 ????
...
Рейтинг: 0 / 0
запрос неправильно считает...
    #32939531
Urri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Help FLOOR
Help CEILING
...
Рейтинг: 0 / 0
запрос неправильно считает...
    #32939585
AleksMed
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
UrriHelp FLOOR
Help CEILING

Они вертают ближайшие большие/меньшие целые числа.
...
Рейтинг: 0 / 0
запрос неправильно считает...
    #32939868
Фотография help123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AleksMed?55.336-MOD(55.336,0.01) СПАСИБО, ПОМОГЛО
...
Рейтинг: 0 / 0
запрос неправильно считает...
    #32940438
Urri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AleksMed UrriHelp FLOOR
Help CEILING

Они вертают ближайшие большие/меньшие целые числа.
А совместить с тем, что leaf чуть раньше написал? ;-)))

Код: plaintext
=floor(x* 100 )/ 100 
...
Рейтинг: 0 / 0
запрос неправильно считает...
    #32940469
AleksMed
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Urri AleksMed UrriHelp FLOOR
Help CEILING

Они вертают ближайшие большие/меньшие целые числа.
А совместить с тем, что leaf чуть раньше написал? ;-)))

Код: plaintext
=floor(x* 100 )/ 100 


Ему нужно отсечь, а если после запятой третий знак будет > 4, то получишь не то что хотел. Тогда уж лучше как доктор ( leaf ) прописал.
...
Рейтинг: 0 / 0
запрос неправильно считает...
    #32940474
Urri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В данном случае эти функции равнозначны ;-)
...
Рейтинг: 0 / 0
запрос неправильно считает...
    #32940488
AleksMed
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
UrriВ данном случае эти функции равнозначны ;-)
Прав.
А это я себе: "Перед ответом посмотри Help"
...
Рейтинг: 0 / 0
запрос неправильно считает...
    #32940523
leaf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
STORE 10.9 TO gnNumber1
STORE -10.1 TO gnNumber2

? FLOOR(gnNumber1) && Displays 10
? FLOOR(gnNumber2) && Displays -11

? int(gnNumber1) && Displays 10
? int(gnNumber2) && Displays -10
...
Рейтинг: 0 / 0
запрос неправильно считает...
    #32940546
leaf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
STORE -10.111 TO gnNumber2
?gnNumber2%0.01 &&returns 0.009
?gnNumber2-gnNumber2%0.01 && returns -10.120
...
Рейтинг: 0 / 0
запрос неправильно считает...
    #32940561
leaf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тогда уж лучше как доктор (leaf) прописал.

2алекс
за доктора спасибо хотя мне еще до МНС расти и расти
...
Рейтинг: 0 / 0
запрос неправильно считает...
    #32940585
AleksMed
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
leaf Тогда уж лучше как доктор (leaf) прописал.

2алекс
за доктора спасибо хотя мне еще до МНС расти и расти

Пожалуйста :) Было бы желание.

С INT мне тоже больше нравится. Она более понятна и не выполняет лишних действий.

И опять себе: "Прежде чем согласиться проверь на всем диапазоне чисел, а не только на положительных"
...
Рейтинг: 0 / 0
25 сообщений из 47, страница 1 из 2
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / запрос неправильно считает...
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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