Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 31.05.2014, 23:25   #1
Puffi.Muffi
Пользователь
 
Регистрация: 18.06.2013
Сообщений: 57
По умолчанию экспоненциальный формат

Уважаемые программисты,

Помогите, пожалуйста, разобраться с задачей.
У меня большое количество сверок привязано к числу "0".

При запуске макроса в некоторых местах (такое ощущение что в случайном порядке) определяется не ноль, а значения типа -1,45519152283669E-11

Например если в Immediate window вбить "?57000+18922.46+12520-88442.46"
оно мне выводит "-7,27595761418343E-12", а не мой любимый ноль.

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

С уважением,
Puffi.Muffi
Puffi.Muffi вне форума Ответить с цитированием
Старый 31.05.2014, 23:51   #2
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,858
По умолчанию

Решение - округление чисел
Проблема из-за механизма вычислений, заложенного в Excel (обойти - никак)
На форуме можно найти объяснение причин, почему так происходит (ссылку дать не могу - лень искать)

вместо проверки типа
Код:
if r=0 then
используйте
Код:
if round(r,2)=0 then
и всё будет нормально
EducatedFool вне форума Ответить с цитированием
Старый 01.06.2014, 00:04   #3
Puffi.Muffi
Пользователь
 
Регистрация: 18.06.2013
Сообщений: 57
По умолчанию

Как просто! Спасибо!!!
Причин я уже начиталась вдоволь =))
Puffi.Muffi вне форума Ответить с цитированием
Старый 01.06.2014, 00:30   #4
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,170
По умолчанию

Как вариант:
Код:
Sub tt()
    Dim t As Double
    t = 57000
    t = t + 18922.46
    t = t + 12520 '+ 1
    t = CStr(t) - CStr(88442.46)
End Sub
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 01.06.2014, 13:16   #5
Puffi.Muffi
Пользователь
 
Регистрация: 18.06.2013
Сообщений: 57
По умолчанию

Hugo121,

очень интересно.
Однако для меня это странно: почему в числовом формате excel выдает какие-то странные значения, а в строковом типе нормальное число.

Спасибо,
Puffi.Muffi
Puffi.Muffi вне форума Ответить с цитированием
Старый 01.06.2014, 14:54   #6
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,170
По умолчанию

Тоже в голове не укладывается
Но раз была проблема - см.файл.
Числа в одном формате, всюду с виду одинаковые - но не равны!
Только не надо кликать по ячейкам - сломаете!
На деле кликать естественно никто не будет, да и вообще трогать лист - не вариант.
Выход - переводить оба в стринг.
Вложения
Тип файла: rar Чудеса_сравнения_post_274625.rar (8.0 Кб, 8 просмотров)
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
КАК ПЕРЕДЕЛАТЬ ФОРМАТ mp4 В ФОРМАТ 3gp,MPEG4 kamalruslan Софт 4 20.08.2015 16:16
Экспоненциальный тип в Float Demien Общие вопросы Delphi 13 02.10.2013 23:44
Экспоненциальный тип Demien Общие вопросы Delphi 8 23.05.2012 13:28
Экспоненциальный вид числа nats C# (си шарп) 2 25.08.2011 22:40
из десятичной системы счисления преобразовать в двоичную систему в экспоненциальный вид [Паскаль] Yamkin Помощь студентам 3 16.12.2010 00:08