Как вычесть целую часть дробного числа?

 
Привет! Такая ситуация: есть число 1.5 (например), как сделать что бы советник использовал только целую его часть, то есть 1? Пробовал NormalizeDouble(count,0); для чисел 1.1-1.4 работает отлично, а вот 1.5-1.9 округляет до 2... возможно есть способ избежать округления? Помогите добрые люди!
 
Maksim Neimerik:
Привет! Такая ситуация: есть число 1.5 (например), как сделать что бы советник использовал только целую его часть, то есть 1? Пробовал NormalizeDouble(count,0); для чисел 1.1-1.4 работает отлично, а вот 1.5-1.9 округляет до 2... возможно есть способ избежать округления? Помогите добрые люди!
double a = 1.9;
int b = int(a); // 1
 
Ihor Herasko:
Жесть!)) И все?
 
Maksim Neimerik:
Жесть!)) И все?

Можно заморочливее ))

double a = 1.9;
int b = int(MathFloor(a));
 
Maksim Neimerik:
Жесть!)) И все?

все, если число положительное и не выходит на пределы INT_MAX или LONG_MAX для (long)

 
Nikolai Semko:

все, если число положительное и не выходит на пределы INT_MAX

нет, с этим все в порядке)
 
Nikolai Semko:

все, если число положительное.

С отрицательным то же самое. А вот пример с MathFloor() даст уже другой результат.

 
Ihor Herasko:

С отрицательным то же самое. А вот пример с MathFloor() даст уже другой результат.

Большое спасибо!
 
Ihor Herasko:

С отрицательным то же самое. А вот пример с MathFloor() даст уже другой результат.

для положительных и отрицательных, если лежат в диапазоне INT_MIN ... INT_MAX:

int Ceil (double x) { return (x-(int)x>0)?(int)x+1:(int)x; }
int Round(double x) { return (x>0)?(int)(x+0.5):(int)(x-0.5);}
int Floor(double x) { return (x>0)?(int)x:((int)x-x>0)?(int)x-1:(int)x; }
Не заметил у Вас функции MathFloor. Она ни к чему.
Поэтому для большинства случаев (a положительное не больше INT_MAX)  (int)a достаточно.
 

Скажите, а как правильно

double  a = 1.234;
int     b = (int)a;
// или
int     b = int(a);
 
Сергей Таболин:

Скажите, а как правильно

Без разницы.

Причина обращения: