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

Вход

Регистрация

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

 

= Мир MS Excel/разница значений в переменной типа Single - Мир MS Excel

  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_, DrMini  
разница значений в переменной типа Single
illios Дата: Вторник, 03.02.2015, 11:11 | Сообщение № 1
Группа: Пользователи
Ранг: Новичок
Сообщений: 10
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Добрый день, прошу подсказать, где копать
макрос суммирует 2 таблицы по уникальному критерию и сравнивает, отклонения закрашиваются цветом
в процессе теста вылез непонятный баг
значения в двух переменных одинаковы, тип переменных одинаковый "Single", но условие сравнения показывает, что данные неравны
проверка формулой "суммесли" показывает, что значения равны
файл не могу приложить из-за настроек защиты сети
Вот результат проверки в окне "Immediate"

[vba]
Код
?Spes(n).Summ <> Zakaz(m).Summ
True
?Spes(n).Summ
11122,92
?Zakaz(m).Summ
11122,92
[/vba]


Сообщение отредактировал illios - Вторник, 03.02.2015, 11:36
 
Ответить
СообщениеДобрый день, прошу подсказать, где копать
макрос суммирует 2 таблицы по уникальному критерию и сравнивает, отклонения закрашиваются цветом
в процессе теста вылез непонятный баг
значения в двух переменных одинаковы, тип переменных одинаковый "Single", но условие сравнения показывает, что данные неравны
проверка формулой "суммесли" показывает, что значения равны
файл не могу приложить из-за настроек защиты сети
Вот результат проверки в окне "Immediate"

[vba]
Код
?Spes(n).Summ <> Zakaz(m).Summ
True
?Spes(n).Summ
11122,92
?Zakaz(m).Summ
11122,92
[/vba]

Автор - illios
Дата добавления - 03.02.2015 в 11:11
Саня Дата: Вторник, 03.02.2015, 11:46 | Сообщение № 2
Группа: Друзья
Ранг: Ветеран
Сообщений: 1068
Репутация: 560 ±
Замечаний: 0% ±

XL 2016
так попробуй
[vba]
Код
?TypeName(Spes(n).Summ), TypeName(Zakaz(m).Summ)
[/vba]
 
Ответить
Сообщениетак попробуй
[vba]
Код
?TypeName(Spes(n).Summ), TypeName(Zakaz(m).Summ)
[/vba]

Автор - Саня
Дата добавления - 03.02.2015 в 11:46
Hugo Дата: Вторник, 03.02.2015, 12:55 | Сообщение № 3
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3859
Репутация: 819 ±
Замечаний: 0% ±

365
Сталкивался с таким - тип один, значения переменных одинаковые, а сравнение в коде не проходят. Пришлось обе приводить в стринг, затем сравнивать.
Разница была в том, откуда эти данные попадали на лист.


webmoney: E265281470651 Z422237915069
USDT TRC20: TN8XeEF17o5KPBD9pNwYzNyruycuAc2mVD
 
Ответить
СообщениеСталкивался с таким - тип один, значения переменных одинаковые, а сравнение в коде не проходят. Пришлось обе приводить в стринг, затем сравнивать.
Разница была в том, откуда эти данные попадали на лист.

Автор - Hugo
Дата добавления - 03.02.2015 в 12:55
SLAVICK Дата: Вторник, 03.02.2015, 13:00 | Сообщение № 4
Группа: Модераторы
Ранг: Старожил
Сообщений: 2290
Репутация: 766 ±
Замечаний: 0% ±

2019
Я в таком случае либо пользуюсь округлением - в большинстве случаев(например до 2-х символов), либо ставлю выражение что - то вроде [vba]
Код
abs(Х - У) < 0.01
[/vba]


Иногда все проще чем кажется с первого взгляда.
 
Ответить
СообщениеЯ в таком случае либо пользуюсь округлением - в большинстве случаев(например до 2-х символов), либо ставлю выражение что - то вроде [vba]
Код
abs(Х - У) < 0.01
[/vba]

Автор - SLAVICK
Дата добавления - 03.02.2015 в 13:00
illios Дата: Вторник, 03.02.2015, 13:40 | Сообщение № 5
Группа: Пользователи
Ранг: Новичок
Сообщений: 10
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
две таблицы, в которых итоговые кол-во и сумма одинаковы
таблица 1 - 1000 строк
таблица 2 - 600 строк
при типе Single 56 строк с отклонениями по сумме
при типе Variant 234 строки
при типе Double 167 строк
остановился на типе Currency тут 0 отклонений, но только 4 знака после запятой
думаю, что на кол-ве сделаю сравнение с преобразованием в строки
в суммах не должно быть более чем 2 знака после запятой, так что Currency хватит
спасибо за помощь.
 
Ответить
Сообщениедве таблицы, в которых итоговые кол-во и сумма одинаковы
таблица 1 - 1000 строк
таблица 2 - 600 строк
при типе Single 56 строк с отклонениями по сумме
при типе Variant 234 строки
при типе Double 167 строк
остановился на типе Currency тут 0 отклонений, но только 4 знака после запятой
думаю, что на кол-ве сделаю сравнение с преобразованием в строки
в суммах не должно быть более чем 2 знака после запятой, так что Currency хватит
спасибо за помощь.

Автор - illios
Дата добавления - 03.02.2015 в 13:40
SLAVICK Дата: Вторник, 03.02.2015, 14:15 | Сообщение № 6
Группа: Модераторы
Ранг: Старожил
Сообщений: 2290
Репутация: 766 ±
Замечаний: 0% ±

2019
Так а чем мои варианты не подошли?
У Double - точность гораздо выше чем у "Currency" - это может дать сильные расхождения при расчетах на больших суммах, что в некоторых случаях недопустим0 :D


Иногда все проще чем кажется с первого взгляда.
 
Ответить
СообщениеТак а чем мои варианты не подошли?
У Double - точность гораздо выше чем у "Currency" - это может дать сильные расхождения при расчетах на больших суммах, что в некоторых случаях недопустим0 :D

Автор - SLAVICK
Дата добавления - 03.02.2015 в 14:15
Karataev Дата: Вторник, 03.02.2015, 14:31 | Сообщение № 7
Группа: Проверенные
Ранг: Старожил
Сообщений: 1336
Репутация: 533 ±
Замечаний: 0% ±

Excel
вообще,в excel для работы с числами используется тип данных double .поэтому логичнее вообще отказаться от других типов данных для работы с числами,т.к. чтобы понять,что происходит с числами,нужно быть профессиональным программистом


Сообщение отредактировал Karataev - Вторник, 03.02.2015, 17:01
 
Ответить
Сообщениевообще,в excel для работы с числами используется тип данных double .поэтому логичнее вообще отказаться от других типов данных для работы с числами,т.к. чтобы понять,что происходит с числами,нужно быть профессиональным программистом

Автор - Karataev
Дата добавления - 03.02.2015 в 14:31
illios Дата: Вторник, 03.02.2015, 16:24 | Сообщение № 8
Группа: Пользователи
Ранг: Новичок
Сообщений: 10
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
округление не поможет, т.к. нужны точные цифры, все должно до копейки сходиться
количество идет в штуках, кг тут может быть до 2 знаков после запятой, в тоннах в основном до 3 знаков после запятой, максимум видел 4 знака так что Currency вполне устраивает
Сумма она и в Африке сумма, ну не может быть стоимость быть полкопейки по этому и 2 знаков после запятой хватит, а уж 4...
кстати тип Currency по описанию как раз предназначен для денежного счета

вообще,в excel тип данных double .поэтому логичнее вообще отказаться от других типов данных


в Excel основной тип данных это variant, который считается самым затратным по памяти и соответственно по скорости, а при объемах от 2000 строк это очень затратно по времени
по этому лично я перешел на смешанный тип вычислений, там где есть возможность, при помощи VBA проставляю формулы и считаю, а только там где с формулами не получается, уже использую массив в памяти с описанием тех типов переменных, которые мне нужны
я же не буду хранить 1 и 0 для логического типа данных в double, когда есть boolean
 
Ответить
Сообщениеокругление не поможет, т.к. нужны точные цифры, все должно до копейки сходиться
количество идет в штуках, кг тут может быть до 2 знаков после запятой, в тоннах в основном до 3 знаков после запятой, максимум видел 4 знака так что Currency вполне устраивает
Сумма она и в Африке сумма, ну не может быть стоимость быть полкопейки по этому и 2 знаков после запятой хватит, а уж 4...
кстати тип Currency по описанию как раз предназначен для денежного счета

вообще,в excel тип данных double .поэтому логичнее вообще отказаться от других типов данных


в Excel основной тип данных это variant, который считается самым затратным по памяти и соответственно по скорости, а при объемах от 2000 строк это очень затратно по времени
по этому лично я перешел на смешанный тип вычислений, там где есть возможность, при помощи VBA проставляю формулы и считаю, а только там где с формулами не получается, уже использую массив в памяти с описанием тех типов переменных, которые мне нужны
я же не буду хранить 1 и 0 для логического типа данных в double, когда есть boolean

Автор - illios
Дата добавления - 03.02.2015 в 16:24
SLAVICK Дата: Вторник, 03.02.2015, 16:43 | Сообщение № 9
Группа: Модераторы
Ранг: Старожил
Сообщений: 2290
Репутация: 766 ±
Замечаний: 0% ±

2019
округление не поможет, т.к. нужны точные цифры, все должно до копейки сходиться

А что мешает округлить до 2-х знаков после запятой? :D
[vba]
Код
round(x,2)
[/vba]
На счет:
Сумма она и в Африке сумма, ну не может быть стоимость быть полкопейки по этому и 2 знаков после запятой хватит


Не факт - у нас на фирме точность 5 знаков... т.е. в платежках отображается например 5,00 а на самом деле 4,99543 :D
А теперь посчитайте какие расхождения могут быть на товарообороте хотя бы в 100 000 000 Зарплаты может не хватить :D


Иногда все проще чем кажется с первого взгляда.
 
Ответить
Сообщение
округление не поможет, т.к. нужны точные цифры, все должно до копейки сходиться

А что мешает округлить до 2-х знаков после запятой? :D
[vba]
Код
round(x,2)
[/vba]
На счет:
Сумма она и в Африке сумма, ну не может быть стоимость быть полкопейки по этому и 2 знаков после запятой хватит


Не факт - у нас на фирме точность 5 знаков... т.е. в платежках отображается например 5,00 а на самом деле 4,99543 :D
А теперь посчитайте какие расхождения могут быть на товарообороте хотя бы в 100 000 000 Зарплаты может не хватить :D

Автор - SLAVICK
Дата добавления - 03.02.2015 в 16:43
  • Страница 1 из 1
  • 1
Поиск:

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