Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Почему так (2+2 <> 4)? - Мир MS Excel

Регистрация · Логин: · Пароль: · · Забыли пароль?
  • Страница 1 из 1
  • 1
Модератор форума: _Boroda_, Manyasha, SLAVICK, китин  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Почему так (2+2 <> 4)? (Макросы/Sub)
Почему так (2+2 <> 4)?
Raid Дата: Четверг, 17.01.2019, 01:47 | Сообщение № 1
Группа: Пользователи
Ранг: Новичок
Сообщений: 25
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
Есть 2 таблицы, содержимое ряда ячеек первой таблицы высчитываются из аналогичной (по номеру ряда) второго столбца второй таблицы. Т.е. по определению, сумма ячеек в строке первой таблицы одинаковы.
Простите, если запутано, но не в этом суть. Для проверки я запустил простую проверку обратным действием -в цикле сумировал ячейки ряда первой таблицы и сравнил их с ячекйкой, которая служила основанием для расчета (if сумма всех ячеек <> ячейке "Материнской" таблице Then окрасить строку в красный цвет). Каково же было мое удивление, когда несколько строк сработали по этому условию... Пересчитал вручную - совпадают сумма ячеек и "контрольное" значение.
Запустил пошагово - то же. На скриншоте (http://prntscr.com/m8669n) видно SS (сумма) ячеек подсчитанная в цикле равна материнской ячейке (минус соседняя ячейка, но она пустая). Т.е. два абсолютно одинаковых числа в условии сравнения программой отрабатываются как разные...
Почему так??


Сообщение отредактировал Raid - Четверг, 17.01.2019, 01:51
 
Ответить
СообщениеЕсть 2 таблицы, содержимое ряда ячеек первой таблицы высчитываются из аналогичной (по номеру ряда) второго столбца второй таблицы. Т.е. по определению, сумма ячеек в строке первой таблицы одинаковы.
Простите, если запутано, но не в этом суть. Для проверки я запустил простую проверку обратным действием -в цикле сумировал ячейки ряда первой таблицы и сравнил их с ячекйкой, которая служила основанием для расчета (if сумма всех ячеек <> ячейке "Материнской" таблице Then окрасить строку в красный цвет). Каково же было мое удивление, когда несколько строк сработали по этому условию... Пересчитал вручную - совпадают сумма ячеек и "контрольное" значение.
Запустил пошагово - то же. На скриншоте (http://prntscr.com/m8669n) видно SS (сумма) ячеек подсчитанная в цикле равна материнской ячейке (минус соседняя ячейка, но она пустая). Т.е. два абсолютно одинаковых числа в условии сравнения программой отрабатываются как разные...
Почему так??

Автор - Raid
Дата добавления - 17.01.2019 в 01:47
Raid Дата: Четверг, 17.01.2019, 01:50 | Сообщение № 2
Группа: Пользователи
Ранг: Новичок
Сообщений: 25
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
Попробовал сравнивать через переменные - та же проблема...
Пожалуйста, объясните, в чем проблема??? Почему одни строки нормально отрабатываются, а некоторые отрабатываются как не одинаковые???
 
Ответить
СообщениеПопробовал сравнивать через переменные - та же проблема...
Пожалуйста, объясните, в чем проблема??? Почему одни строки нормально отрабатываются, а некоторые отрабатываются как не одинаковые???

Автор - Raid
Дата добавления - 17.01.2019 в 01:50
vikttur Дата: Четверг, 17.01.2019, 03:24 | Сообщение № 3
Группа: Друзья
Ранг: Старожил
Сообщений: 2895
Репутация: 519 ±
Замечаний: 0% ±

Многие нарываются :)
Ошибка стандарта вычислений с плавающей точкой (запятой), применяемого в вычислительной технике. Ошибка возникает в 15-м знаке после запятой при делении или разности из-за двоичных преобразований.
Решение: округлять полученное значение до нужной точности
[vba]
Код
ss = Round(ss,2)
[/vba]
Если интересно:
Стандарт IEEE 754, §9.


Сообщение отредактировал vikttur - Четверг, 17.01.2019, 03:26
 
Ответить
СообщениеМногие нарываются :)
Ошибка стандарта вычислений с плавающей точкой (запятой), применяемого в вычислительной технике. Ошибка возникает в 15-м знаке после запятой при делении или разности из-за двоичных преобразований.
Решение: округлять полученное значение до нужной точности
[vba]
Код
ss = Round(ss,2)
[/vba]
Если интересно:
Стандарт IEEE 754, §9.

Автор - vikttur
Дата добавления - 17.01.2019 в 03:24
Raid Дата: Четверг, 17.01.2019, 11:23 | Сообщение № 4
Группа: Пользователи
Ранг: Новичок
Сообщений: 25
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
Огромное спасибо!!!!
А то я уже на дедовых счетах результаты проверял.... :)
Округление сработало прекласно!!
 
Ответить
СообщениеОгромное спасибо!!!!
А то я уже на дедовых счетах результаты проверял.... :)
Округление сработало прекласно!!

Автор - Raid
Дата добавления - 17.01.2019 в 11:23
Raid Дата: Пятница, 18.01.2019, 01:50 | Сообщение № 5
Группа: Пользователи
Ранг: Новичок
Сообщений: 25
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
Скажите, а какой допуск разбежности может быть? у меня до 1% это нормально?
http://prntscr.com/m8ngn3
 
Ответить
СообщениеСкажите, а какой допуск разбежности может быть? у меня до 1% это нормально?
http://prntscr.com/m8ngn3

Автор - Raid
Дата добавления - 18.01.2019 в 01:50
vikttur Дата: Пятница, 18.01.2019, 01:56 | Сообщение № 6
Группа: Друзья
Ранг: Старожил
Сообщений: 2895
Репутация: 519 ±
Замечаний: 0% ±

Да откуда знать, какой допуск для Вас нормальный? Если 1% много, при округлении оставляйте больше знаков после запятой. Можно и 9, и 12. А конечный результат округлить до копеек.
 
Ответить
СообщениеДа откуда знать, какой допуск для Вас нормальный? Если 1% много, при округлении оставляйте больше знаков после запятой. Можно и 9, и 12. А конечный результат округлить до копеек.

Автор - vikttur
Дата добавления - 18.01.2019 в 01:56
Raid Дата: Суббота, 19.01.2019, 23:39 | Сообщение № 7
Группа: Пользователи
Ранг: Новичок
Сообщений: 25
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
Цитата
Да откуда знать, какой допуск для Вас нормальный? Если 1% много, при округлении оставляйте больше знаков после запятой. Можно и 9, и 12. А конечный результат округлить до копеек.


Сорри, ночь, голова не соображала. Подумал, что это разница в подсчетах связана с ошибкой стандарта чисел с плавающей запятой. Потом нашел ошибку :)
 
Ответить
Сообщение
Цитата
Да откуда знать, какой допуск для Вас нормальный? Если 1% много, при округлении оставляйте больше знаков после запятой. Можно и 9, и 12. А конечный результат округлить до копеек.


Сорри, ночь, голова не соображала. Подумал, что это разница в подсчетах связана с ошибкой стандарта чисел с плавающей запятой. Потом нашел ошибку :)

Автор - Raid
Дата добавления - 19.01.2019 в 23:39
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Почему так (2+2 <> 4)? (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

Яндекс цитирования
© 2010-2019 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!