On-line: SergKis, гостей 4. Всего: 5 [подробнее..]
АвторСообщение



Пост N: 124
Зарегистрирован: 24.04.13
ссылка на сообщение  Отправлено: 12.10.16 10:48. Заголовок: Странное поведение при проверке на равенство 0 (баг)


Обнаружил следующий парадокс. Смотрите пример кода :

 цитата:

? "arotp[i,5] = " ,arotp[i,5] ,"arotp[i,5]#0 = ", arotp[i,5]#0
wait


А теперь результат:

 цитата:

arotp[i,5] = 0.00 arotp[i,5]#0 = .T.
Press any key to continue...


Периодически сталкиваюсь с таким багом,
иногда делал двойное преобразование, сначала цифру в строку, потом строку в цифру,
полученная цифра уже равнялась 0.

 цитата:

? "arotp[i,5] = " ,arotp[i,5] ,"arotp[i,5]#0 = ", arotp[i,5]#0
arotp[i,5]=val(str(arotp[i,5]))
? "arotp[i,5] = " ,arotp[i,5] ,"arotp[i,5]#0 = ", arotp[i,5]#0


Результат:

 цитата:

arotp[i,5] = 0.00 arotp[i,5]#0 = .T.
arotp[i,5] = 0.00 arotp[i,5]#0 = .F.
Press any key to continue...


По-моему эта ошибка ещё была в Clipper, теперь и в Harbour перекочевала.

Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 2 [только новые]


moderator


Пост N: 1041
Зарегистрирован: 06.07.06
ссылка на сообщение  Отправлено: 12.10.16 11:46. Заголовок: При выводе на экран ..


При выводе на экран количество десятичных знаков соответствует SET DECIMALS, а на самом деле их может быть и больше.
Попробуйте, например:

x := 1/3 - 0.33
? x // Выведется 0.00, хотя там 0.00333...
? x == 0 // Выведется .F.
? x+100 // 0.33

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 125
Зарегистрирован: 24.04.13
ссылка на сообщение  Отправлено: 12.10.16 13:34. Заголовок: alkresin, не тот слу..


alkresin, не тот случай.
Поставил SET DECIMALS TO 6.
Всё равно выводит на экран значение 0.00
Видно с массивами как-то по другому.
Изначально в массиве значение из поля БД, потом по алгоритму данные отнимаются из этой ячейки, доходя до 0 или не доходя.

Вот попробовал смоделировать ситуацию:

 цитата:

set deci to 10

a=33

for i=1 to 99

a -= (1/3)

next

? "a = ", a, "a#0 = " , a#0

a=val(str(a))

? "a = ", a, "a#0 = " , a#0




Результат:

 цитата:

a = 0.000000000 a#0 = .T.
a = 0.000000000 a#0 = .F.     



Спасибо: 0 
ПрофильЦитата Ответить
Ответ:
1 2 3 4 5 6 7 8 9
большой шрифт малый шрифт надстрочный подстрочный заголовок большой заголовок видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки моноширинный шрифт моноширинный шрифт горизонтальная линия отступ точка LI бегущая строка оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 380
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет