leia
Newbie | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Цитата: А вот как раз к этим двум методам я и относил Цитата:Нет, это не то. Точнее, описанные там способы проблему не решили. | Не может быть Если в условном форматировании использовать формулу =ОКРУГЛ(A1+B1-C1;4), а вместо =СУММ(D2:D4) прописать =ОКРУГЛ(СУММ(D2:D4);4), то это не может не помочь. (В данном случае второе округление даже не обязательно, но желательно.) Цитата: Цитата:А почему ты решил бороться с проблемой, прибавляя 0,0....1? Потому что мне предложил это Tropin | Я думаю, что он все-таки хотел предложить вместо сравнения в лоб a+b-c=0 использовать |a+b-c|<1E-15 по крайней мере, в программировании лучше именно так проверять на равенство floating point числа. Цитата: Цитата:а в чем, собственно проблема? Здрасьте... приехали... почитай 12 постов выше | Из твоих слов То, что написано в той статье я и сам понял можно было сделать вывод, что проблема исчерпана, потому что в статье все разжевано дальше некуда. Попробую вкратце то же самое, но по-русски. Excel хранит и обрабатывает десятичные числа в двоичном виде согласно стандарту IEEE 754. Не всякую десятичную дробь можно точно представить в двоичном виде, отсюда потери точности. В статье приводится пример, что 0,1 нельзя представить конечным двоичным числом. (Точно так же нельзя дробь 1/3 представить в виде конечной десятичной дроби) Дальше подробно, с кучей примеров эта мысль иллюстрируется. Вот совсем простой пример: 2/3-1/3=1/3 То же в десятичной системе счисления с точностью 3 знака после запятой: 0,667-0,333=0,333 0,334=0,333 вот тебе пример той "ошибки", которую ты нашел в excel. Просто запомни, что в таких случаях нельзя пользоваться сравнением для проверки на равенство, надо или так: окр(0,667-0,333;2)=окр(0,333;2) или так: |0,667-0,333-0,333|<0,01 И будет тебе щастье. |