double d = 9.98; int i = d;
NormalizeDouble позволит сохранить тип переменной.
NormalizeDouble позволит сохранить тип переменной.
NormalizeDouble округляет
Это просто один из способов.
Округлить число до 0 значащих цифр - и тип переменной не изменится и дробной части не будет.
NormalizeDouble позволит сохранить тип переменной.
NormalizeDouble округляет
Это просто один из способов.
Округлить число до 0 значащих цифр - и тип переменной не изменится и дробной части не будет.
Посмотрите на калькулятор. Там есть переключатель округления. Округления бывают разные.
И округлить != отбросить дробную часть.
NormalizeDouble позволит сохранить тип переменной.
double d = 9.98; int i = d; d = i;
Фишка в том, что эти три строчки кода будут скорее всего скомпилированы в несколько команд математического сопроцессора (fpu) и будут выполнены на порядок быстрее, чем MathFloor, и на порядки быстрее, чем NormalizeDouble.
И округлить != отбросить дробную часть.
Нет, конечно. Но Вы же вроде хотели "округление вниз". Вот я и предложил.
А калькулятор - это такая чёрная штука с кнопками?:)
Фишка в том, что эти три строчки кода будут скорее всего скомпилированы в несколько команд математического сопроцессора (fpu) и будут выполнены на порядок быстрее, чем MathFloor, и на порядки быстрее, чем NormalizeDouble.
Я точно не могу сказать. Но скорее всего Вы правы.
Вместе с тем, важно и другое. Если полученное число в последующем коде нужно будет сравнивать на больше-меньше, то всё равно его придётся нормализовать.
Получается, что выбор способа как всегда зависит от нескольких факторов.
Но Вы же вроде хотели "округление вниз". Вот я и предложил.
NormalizeDouble не делает округления вниз. NormalizeDouble делает округление, как заметил Slawa. Просто возьмите и отбросьте дробь из 9.98 с помощью NormalizeDoulbe. Только без хитростей типа вычитания 0.5 перед округлением. Лишние вычисления совершенно ни к чему.Если полученное число в последующем коде нужно будет сравнивать на больше-меньше, то всё равно его придётся нормализовать.
Получается, что выбор способа как всегда зависит от нескольких факторов.
Сравнение целых чисел и сравнение чисел с плавающей запятой - две очень большие разницы с точки зрения разогрева процессора. И, опять же, далеко не в пользу последних = порядки на некоторых платформах, на arm, например, который вообще не имеет fpu. А arm - это ппк и смартфоны. Да и нормализовать целые числа не надо, куда уж нормальнее. Floating point - это всегда оверхед, при любом раскладе, по сравнению с целочисленной арифметикой.Получается, что выбор способа как всегда зависит от нескольких факторов.
Кстати, Вы можете предположить, что представляет из себя NormalizeDouble(), так сказать, изнутри, взглянув на DoubleToStrMorePrecision() из libraries\stdlib.mq4
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Может кто подскажет как отбросить дробную часть числа?