Автор | Сообщение |
|
| |
Пост N: 34
Зарегистрирован: 06.03.06
|
|
Отправлено: 18.04.07 08:44. Заголовок: Сравнение с 0
Clipper 5.01 Старая прога. Недавно стали выскакивать в отчете записи с нулевыми значениями, хотя стоит проверка вывода тоько положительных значений. Типа if summa>0 печатаеи endif Интересно, что проверка summa>0 дает .T., а вывод str(summa,15,6) дает 0.000000. Что за глюк такой? Раньше такого поведения Clipper не замечал. Даже round(summa,2)>0 тоже дает .T. Чем поможете?
|
|
|
Новых ответов нет
[см. все]
|
|
|
| |
Пост N: 31
Зарегистрирован: 29.07.05
|
|
Отправлено: 18.04.07 10:10. Заголовок: Re:
dar пишет: я давно пользуюсь if abs(summa) > 0.005 никаких проблем
|
|
|
|
| модератор
|
Пост N: 472
Зарегистрирован: 25.05.05
|
|
Отправлено: 18.04.07 12:09. Заголовок: Re:
dar пишет: Попробуй if int(summa)>0 ... endif
|
|
|
|
| |
Пост N: 1
Зарегистрирован: 20.04.07
|
|
Отправлено: 20.04.07 00:14. Заголовок: Re:
Clipper достаточно точно производит сравнение, поэтому в таких случаях необходимо учитывать, что это за переменная. Например, если это сумма в рублях - значит у нее скорее всего 2 десятичных знака. Тогда сравнение необходимо производить так: IF ROUND(nSumma, 2) > 0 ........ ENDIF Потому что на самом деле после каких-либо арифметических действий сумма может быть = 0.00000015
|
|
|
|
| |
Пост N: 32
Зарегистрирован: 29.07.05
|
|
Отправлено: 20.04.07 09:59. Заголовок: Re:
Andrey_IV пишет: к сожалению round иногда глючит, здесь это уже обсуждалось
|
|
|
|
| |
Не зарегистрирован
Зарегистрирован: 01.01.70
|
|
Отправлено: 20.04.07 14:06. Заголовок: Re:
if !equal(nSumma,0) ... endif ... Function equal(x,y,eps) eps:=iif(eps=NIL, 0.0000..1 ,eps ) return (abs(x-y)<eps)
|
|
|
|