Как отбросить дробную часть?

 
В функции MathRound нет округления вниз.
Может кто подскажет как отбросить дробную часть числа?
 
 
    double d = 9.98;
    int i = d;
 
NormalizeDouble позволит сохранить тип переменной.
 
NormalizeDouble позволит сохранить тип переменной.

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
Причина обращения: