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

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Maksim Neimerik
30594
Maksim Neimerik  
Привет! Такая ситуация: есть число 1.5 (например), как сделать что бы советник использовал только целую его часть, то есть 1? Пробовал NormalizeDouble(count,0); для чисел 1.1-1.4 работает отлично, а вот 1.5-1.9 округляет до 2... возможно есть способ избежать округления? Помогите добрые люди!
Ihor Herasko
21048
Ihor Herasko  
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
Maksim Neimerik
30594
Maksim Neimerik  
Ihor Herasko:
Жесть!)) И все?
Ihor Herasko
21048
Ihor Herasko  
Maksim Neimerik:
Жесть!)) И все?

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

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

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

Maksim Neimerik
30594
Maksim Neimerik  
Nikolai Semko:

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

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

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

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

Maksim Neimerik
30594
Maksim Neimerik  
Ihor Herasko:

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

Большое спасибо!
Nikolai Semko
6569
Nikolai Semko  
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 достаточно.
Сергей Таболин
2641
Сергей Таболин  

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

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

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

Без разницы.

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий