:: Visual Foxpro, Foxpro for DOS
INT()
reware
Автор

Сообщений: 4116
Откуда: Хабаровск
Дата регистрации: 21.07.2008
Непонятки :
? int(2.050000000000000044*100) && 205
? int(2.050000000000000043*100) && 204
Кто-то может на пальцах обьяснить эту странность INT() ? Выходит, безопаснее использовать ROUND(x,0).
VFP9+SP2.
Ratings: 0 negative/0 positive
Re: INT()
rud

Сообщений: 640
Откуда: Москва
Дата регистрации: 02.09.2000
А в чем собственно непонятки? В обоих случаях Фокс выводит 205. Что еще может быть?
Ratings: 0 negative/0 positive
Re: INT()
reware
Автор

Сообщений: 4116
Откуда: Хабаровск
Дата регистрации: 21.07.2008
rud
А в чем собственно непонятки? В обоих случаях Фокс выводит 205. Что еще может быть?
В первом случае возвращается 205, во втором - 204. Причем, это не только у меня на моей машине.
Ratings: 0 negative/0 positive
Re: INT()
Asws

Сообщений: 325
Откуда: Балаково
Дата регистрации: 20.01.2008
VFP9 - в обоих случаях выводит 205
VFP9 SP2 - 205 и 204 соответственно
Ratings: 0 negative/0 positive
Re: INT()
reware
Автор

Сообщений: 4116
Откуда: Хабаровск
Дата регистрации: 21.07.2008
Asws
VFP9 - в обоих случаях выводит 205
VFP9 SP2 - 205 и 204 соответственно
Это что, одно из исправлений/улучшений, предусмотреных в SP2 ?
Ratings: 0 negative/0 positive
Re: INT()
Asws

Сообщений: 325
Откуда: Балаково
Дата регистрации: 20.01.2008
Кто знает, может винить SP2 не стоит, MS сами не знали наверное о таком эффекте.
У меня буквально на днях аналогичная ситуация, только с JavaScript,
что интересно, под всеми пятью установленными у меня браузерами:

Перемножал два числа, 11 и 0.55
так вот такой код:
s=var1*var2
ww+='<td align="center">'+s+'</td></tr>';
выводит 6.050000000000001

пришлось извращаться :
s=parseInt(var1*var2*100);
ww+='<td align="center">'+s/100+'</td></tr>';
чтобы получить правильные 6.05




Исправлено 4 раз(а). Последнее : Asws, 05.09.09 22:42
Ratings: 0 negative/0 positive
Re: INT()
HouseManedger

Сообщений: 53
Дата регистрации: 25.06.2009
Максимальный размер числовых и полей с плавающей точкой = 20 знаков
Цитата:
? int(2.050000000000000043*100)
а это явный перебор, вот лиса и запуталась
Ratings: 0 negative/0 positive
Re: INT()
reware
Автор

Сообщений: 4116
Откуда: Хабаровск
Дата регистрации: 21.07.2008
HouseManedger
Максимальный размер числовых и полей с плавающей точкой = 20 знаков
Цитата:
? int(2.050000000000000043*100)
а это явный перебор, вот лиса и запуталась
А чего тут путаться - сколько бы знаков не помещалось в разрядной сетке, в целой части получается всегда 205. Это и ожидалось увидеть.
Ratings: 0 negative/0 positive
Re: INT()
Naomi

Сообщений: 1796
Дата регистрации: 09.10.2003
Y menja tozhe vyvodit
205/204 (VFP9 SP2) i tozhe neponjatno.
Ratings: 0 negative/0 positive
Re: INT()
piva

Сообщений: 18655
Откуда: Курган
Дата регистрации: 24.03.2004
vfp6-9sp2 везде одинаково - но в некоторых ситуациях видень "глюк" вычислителя фокса в Display Memory
a1=2.050000000000000044
a2=2.050000000000000043
z1=(a1*1000/10) && 205
z2=(a2*1000/10) && 204
DISPLAY MEMORY LIKE *
? Int(z1)
? Int(z2)
А если не *100 а умножить *10*10 то все работает номрально
a1=float(2.050000000000000044)
a2=float(2.050000000000000043)
z1=(a1*10*10) && 205
z2=(a2*10*10) && 204
DISPLAY MEMORY LIKE *
? Int(z1)
? Int(z2)

Ну а фукнция Float - вам в подарок от меня
Только она ничего не делает


------------------
Часто бывает так, что есть над чем задуматься, а нечем.
Ratings: 0 negative/0 positive
Re: INT()
reware
Автор

Сообщений: 4116
Откуда: Хабаровск
Дата регистрации: 21.07.2008
Может кто ответит, у кого чистый VFP9 или VFP9+SP1. Хочется уточнить, является ли этот глюк особенностью SP2. Хотя в SP2 и без этого достаточно глюков. А ведь эта самая "ошибка вычислителя", при всей свой кажущейся невинности, может сильно подпортить работу проекта, когда, например, сравниваешь целое с дробным. Сильно не хочется заниматься глупостью и переписывать проект, заменяя INT(x) на ROUND(x,0) или INT(ROUND(x,0)).



Исправлено 1 раз(а). Последнее : reware, 06.09.09 08:34
Ratings: 0 negative/0 positive
Re: INT()
dimuhametov

Сообщений: 1562
Откуда: Костанай
Дата регистрации: 01.11.2008
reware
Может кто ответит, у кого чистый VFP9 или VFP9+SP1. Хочется уточнить, является ли этот глюк особенностью SP2.
У меня VFP9.0 SP1 Результат тот же 205,204.


------------------
Незнание делает жизнь такой интересной.
Ratings: 0 negative/0 positive
Re: INT()
rud

Сообщений: 640
Откуда: Москва
Дата регистрации: 02.09.2000
У меня еще веселее. Если сделать, как написано у автора темы
? int(2.050000000000000044*100)
? int(2.050000000000000043*100)
то выводит соответственно 205 и 204
А если вот так:
a=int(2.050000000000000044*100)
MESSAGEBOX(a)
int(2.050000000000000043*100)
MESSAGEBOX(a)
то оба раза выводится 205
Ratings: 0 negative/0 positive
Re: INT()
rud

Сообщений: 640
Откуда: Москва
Дата регистрации: 02.09.2000
Понял в третьей строчке не прописано a=
Ratings: 0 negative/0 positive
Re: INT()
reware
Автор

Сообщений: 4116
Откуда: Хабаровск
Дата регистрации: 21.07.2008
dimuhametov
У меня VFP9.0 SP1 Результат тот же 205,204.
Осталось выяснить, что будет на чистом VFP9 без SP. Есть подозрение, что оно так и по жизни на VFP работало, только мало кто этим интересовался. Я пытался в баг-листах SP2 что-нить по теме найти, но там столько багов, что мне быстро надоело.
Ratings: 0 negative/0 positive
Re: INT()
ssa

Сообщений: 13008
Откуда: Москва
Дата регистрации: 23.03.2005
Интересно, сколько раз нужно повторить про гарантированную точность в фоксе только до 16 знаков после запятой? Похоже, тема из категории вечных.


------------------
Лень - это неосознанная мудрость.
Ratings: 0 negative/0 positive
Re: INT()
piva

Сообщений: 18655
Откуда: Курган
Дата регистрации: 24.03.2004
Тем более что "проблема int(21)" уже лет 15 назад обсуждалась
Как правильно сказал Сергей - игра на грани фола фувствительнсоти фокса никчему не приведенот тем более после Display memory это видно как ФОКС видит эта цифры только "учет "шума"" не показыватся явно - а он был - есть и будет ;)


------------------
Часто бывает так, что есть над чем задуматься, а нечем.




Исправлено 1 раз(а). Последнее : piva, 06.09.09 12:36
Ratings: 0 negative/0 positive
Re: INT()
reware
Автор

Сообщений: 4116
Откуда: Хабаровск
Дата регистрации: 21.07.2008
piva
Тем более что "проблема int(21)" уже лет 15 назад обсуждалась Как правильно сказал Сергей - игра на грани фола фувствительнсоти фокса никчему не приведенот тем более после Display memory это видно как ФОКС видит эта цифры только "учет "шума"" не показыватся явно - а он был - есть и будет ;)
"Петя, сходи в соседнюю комнату, посмотри, что там делают дети и скажи им, чтобы они этого не делали".
И, стало быть, чтобы исковеркать целую часть дробного результата, достаточно для получения этого самого результата задать дробный параметр с 20 знаками ? Хотя, этот 20-й знак никак не должен влиять на целую часть.



Исправлено 1 раз(а). Последнее : reware, 06.09.09 12:45
Ratings: 0 negative/0 positive
Re: INT()
Mitchman

Сообщений: 9978
Откуда: Николаев
Дата регистрации: 24.05.2002
ssa
Интересно, сколько раз нужно повторить про гарантированную точность в фоксе только до 16 знаков после запятой? Похоже, тема из категории вечных.
мало того что эта тема из вечных - она всегда напоминает разговор слепых с глухими

ну не понимаю люди что число математическое - это математическое число
а число вещественное в памяти компьютера это число вещественное - и если вы заходите за рамки точности(причем еще и явно вручную) то и можете получить самые непредсказуемые результаты
использовать ИНТ для отделения целой части неокругленного до малых знаков числа - есть просто глупость(ИМХО) - что и подтверждают ваши опытные изыскания


------------------
-
«свидомые украинцы озабочены не столько созданием украинской культуры, сколько уничтожением русской»
-
Олесь Бузина
Ratings: 0 negative/0 positive
Re: INT()
Юрий Чувашов

Сообщений: 278
Откуда: г.Серпухов
Дата регистрации: 17.05.2005
Вот уж точно НЕПРЕДСКАЗУЕМЫЕ результаты.
Ratings: 0 negative/0 positive


Извините, только зарегистрированные пользователи могут оставлять сообщения в этом форуме.

On-line: 36 (Гостей: 36)

© 2000-2024 Fox Club 
Яндекс.Метрика