Как из 0.1999 получить 1999 ??? - страница 2

 
utock:
подскажите как возможно такое сделать?
0.1999/Point = 19990
double Pp;
//----------+
void init() {
   Pp=Point;
   if(Pp==0.00001 || Pp==0.001) Pp*=10;
}
//----------+
void start() { 

0.1999/Pp = 1999

}
 
utock:
Спасибо)))) а можно как то по другому? я имею ввиду какую либо функцию, чтобы это число поставить в функцию и 0 целых убралось?
a = 0.1999
b = 500
c = 100
x = a * b / (b / c) * c

))))

 
Сергей Таболин:

))))

типы переменных нужно писать, но все равно не работает для double

double a=0.0007;
int b = 500;
int c = 100;
double x = a * b / (b / c) * c;
Print("x = ",x);

2019.06.24 07:58:54.519 tst EURUSD,M30: x = 6.999999999999999

https://www.mql5.com/ru/forum/287618
 
utock:
Спасибо)))) а можно как то по другому? я имею ввиду какую либо функцию, чтобы это число поставить в функцию и 0 целых убралось?

Если мы имеем дело с числами типа double, то во время расчетов надо обязательно задавать точность его представления.

Т.е. надо задавать(или иметь) количество цифр после запятой. Без этого эту задачу решить невозможно.


Если это котировка и мы сможем определить количество знаков после запятой через Digits() или _Digits, то это простая арифметика:


   double price=54.12345;

   int res = price * MathPow(10, _Digits);
 
Igor Makanu:

типы переменных нужно писать, но все равно не работает для double

2019.06.24 07:58:54.519 tst EURUSD,M30: x = 6.999999999999999

https://www.mql5.com/ru/forum/287618

Если серьёзно, то ВСЕ переменные должны иметь тип double. Иначе (double)0.1234 * (int)123 всегда будет 0.

int DoubleToInt(double d_num)
{
   double a = NormalizeDouble(d_num,Digits());
   int    b = (int)(a * MathPow(10,Digits()));
   return(b);
}
 
Сергей Таболин:

Если серьёзно, то ВСЕ переменные должны иметь тип double. Иначе (double)0.1234 * (int)123 всегда будет 0.

Если серьезно, то топикстартер не формализовал задачу, а я дал ссылку на топик с решением задачи как узнать кол-во знаков, если не ошибаюсь, то решение на стр 12 или 13 от Ильи