Автор | Сообщение |
|
| |
Пост 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 перекочевала.
|
|
|
Новых ответов нет
[см. все]
|
|
|
| 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
|
|
|
|
| |
Пост 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. |
|
|
|
|
|