# Точность вычисления. Преобразование вещественного числа в целое.

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Проявляй активность в сообществе. Увеличивай ленту достижений!
186
2011.06.11 12:47
```//+------------------------------------------------------------------+
//|                                                         Test.mq4 |
//+------------------------------------------------------------------+

double const=0.0001;
double x;
int a1,a2;

//+------------------------------------------------------------------+
//| script program start function                                    |
//+------------------------------------------------------------------+
int start()
{
int i;
string str;
//----
for(i=45;i<64;i++)
{
a1=i;
x=a1*const;
a2=MathFloor(x/const);

if(a1==a2)str="; ok ";
else str="; !!!";

Print( "a1=a2 => ",a1 ,"=",a2 ,str , "  x=",DoubleToStr(x,8) );
}
//----

return(0);
}
//+------------------------------------------------------------------+

14:18:08 Compiling 'Test'
14:18:08 Test GBPUSD,Daily: a1=a2 => 45=45; ok   x=0.00450000
14:18:08 Test GBPUSD,Daily: a1=a2 => 46=46; ok   x=0.00460000
14:18:08 Test GBPUSD,Daily: a1=a2 => 47=47; ok   x=0.00470000
14:18:08 Test GBPUSD,Daily: a1=a2 => 48=48; ok   x=0.00480000
14:18:08 Test GBPUSD,Daily: a1=a2 => 49=48; !!!  x=0.00490000
14:18:08 Test GBPUSD,Daily: a1=a2 => 50=50; ok   x=0.00500000
14:18:08 Test GBPUSD,Daily: a1=a2 => 51=51; ok   x=0.00510000
14:18:08 Test GBPUSD,Daily: a1=a2 => 52=52; ok   x=0.00520000
14:18:08 Test GBPUSD,Daily: a1=a2 => 53=53; ok   x=0.00530000
14:18:08 Test GBPUSD,Daily: a1=a2 => 54=54; ok   x=0.00540000
14:18:08 Test GBPUSD,Daily: a1=a2 => 55=55; ok   x=0.00550000
14:18:08 Test GBPUSD,Daily: a1=a2 => 56=56; ok   x=0.00560000
14:18:08 Test GBPUSD,Daily: a1=a2 => 57=57; ok   x=0.00570000
14:18:08 Test GBPUSD,Daily: a1=a2 => 58=58; ok   x=0.00580000
14:18:08 Test GBPUSD,Daily: a1=a2 => 59=58; !!!  x=0.00590000
14:18:08 Test GBPUSD,Daily: a1=a2 => 60=60; ok   x=0.00600000
14:18:08 Test GBPUSD,Daily: a1=a2 => 61=61; ok   x=0.00610000
14:18:08 Test GBPUSD,Daily: a1=a2 => 62=62; ok   x=0.00620000
14:18:08 Test GBPUSD,Daily: a1=a2 => 63=63; ok   x=0.00630000
14:18:08 Test GBPUSD,Daily: uninit reason 0
14:18:08 Test GBPUSD,Daily: removed
```
` `

Глюк какой то. Как быть? Целое число умножается на константу "const", затем обратно делится на эту же константу, однако результат не всегда оказывается равным предыдущему числу. При 49 и 59, получается 48 и 58 соответственно.

Непонятно почему 0.00590000 разделить на 0.0001 получается 58 ?

Модератор
23725
2011.06.11 15:19
7843
2011.06.11 16:19

Вероятно, это особенность MathFloor()

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

186
2011.06.11 16:21

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