У меня проблема с сопоставлением двух переменных типа «Реал». Один из них - результат математической операции, хранящейся в наборе данных, второй - значение поля редактирования в форме, преобразованное StrToFloat и сохраненное в «Реальная» переменная. Проблема заключается в следующем: Delphi - сравнение двух переменных «реального»
Как вы можете видеть, программа пытается сказать мне, что 121,97 не равна 121,97 ... Я прочитал this topic, и я не уверен, copletely , что это та же проблема. Если бы это было так, не были бы и номерами, хранящимися в переменных, как точно такое же самое ближайшее представимое число, которое для 121.97 равно 121.96999 99999 99998 86313 16227 83839 70260 62011 71875
?
Теперь предположим, что они не хранятся как одно и то же самое самое представимое число. Как узнать, как именно они хранятся? Когда я смотрю в окне отладки «CPU», я полностью теряюсь. Я вижу адреса, где эти значения должны быть, но ничто не похоже на какое-то двоичное, шестнадцатеричное или какое-либо представление фактического числа ... Я признаю, что расширенная отладка неизвестна для меня ...
Редактировать: эти два значения действительно немного отличаются.
ОК, мне не нужно, чтобы понять все. Хотя я не имеем дело с деньгами, там будет максимум 3 знака после запятой, так что «валюта» является выход
КСТАТИ: Расчет:
DATA[i].Meta.UnUsedAmount := DATA[i].AMOUNT - ObjQuery.FieldByName('USED').AsFloat;
В этом случае 3695 - 3573,03
См. JIRA RSP-13792. Вы можете вызвать функцию 'comparevalue'. – Magoo
@Magoo Этот отчет фиктивный. Компилятор ведет себя корректно. –
'StrToFloat' должен вести себя так, как вы говорите.Но как насчет другой ценности? Как он рассчитывается. Я думаю, вы должны сосредоточиться на реальной проблеме, которую мы не можем видеть. –