1

Тема: Странно работает вычитание

Почему этот код

    res = 106.02-106.01
    message(tostring(res), 1)
    if res == 0.01 then
        message('равно 0.01', 1)
    else
        message('неравно 0.01', 1)
    end

выдает такие результаты

0.0099999999999909
неравно 0.01

Сложение, умножение и деление работают правильно.

2

Re: Странно работает вычитание

Почитайте, пожалуйста, вот эти две темы на форуме квика:
[url]http://quik.ru/forum/qpile/13628/[/url]
[url]http://quik.ru/forum/qpile/55318/[/url]

RAV пишет:

Сложение, умножение и деление работают правильно.

Это вам только кажется. Все операции с вещественными числами работают одинаково.

Для сравнения вещественнх чисел на равенство всегда используйте вот такой код:

eps = 0.00001
   ....
if math.abs(res-0.01) < eps then
      message('равно 0.01', 1)
else
      message('неравно 0.01', 1)
end

Выбор значения eps - задача довольно творческая, надо исходить из конкретной специфики, но в принципе если вы работаете с денежными величинами, выраженными в рублях, то приведенный код и выбранное значение достаточно хорошее.

3

Re: Странно работает вычитание

Спасибо.  Суть проблемы понял.