Скачать MetaTrader 5

Проблема с оператором деления

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
MQL5 Cloud Network это сеть распределенных вычислений. Оцени сам!
Maria Baburina
2517
Maria Baburina 2015.07.31 19:47 
Здравствуйте! Подскажите, пожалуйста, почему при вычислении выражения (10/100) советник возвращает 0. И при использовании переменных и просто при константах. Тип double, т.е. должно получиться 0.1 без проблем. Блок с этим выражением был взят из другого кода, т.е. все по идее работало.
Vladimir Karputov
Модератор
46155
Vladimir Karputov 2015.07.31 19:54  
Maria Baburina:
Здравствуйте! Подскажите, пожалуйста, почему при вычислении выражения (10/100) советник возвращает 0. И при использовании переменных и просто при константах. Тип double, т.е. должно получиться 0.1 без проблем. Блок с этим выражением был взят из другого кода, т.е. все по идее работало.

В Вашем примере и число 10 и число 100 - целые. А вот если пропишем так:

10.0/100

то получится нужный результат 0.01.

 

Вот пример скрипта:

//+------------------------------------------------------------------+
//|                                                         Test.mq5 |
//|                        Copyright 2015, MetaQuotes Software Corp. |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2013, MetaQuotes Software Corp."
#property link      "http://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   int  intA=10/100;
   double doubleB=10.0/100;
   Print("intA ",intA,", doubleB ",doubleB);
  }
//+------------------------------------------------------------------+
Maria Baburina
2517
Maria Baburina 2015.07.31 20:02  
Поняла, спасибо!
Vladimir Karputov
Модератор
46155
Vladimir Karputov 2015.07.31 20:02  

Или даже так: обе переменные имеют тип double, но одинаковая операция возвращает разный результат:

//+------------------------------------------------------------------+
//|                                                         Test.mq5 |
//|                        Copyright 2015, MetaQuotes Software Corp. |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2013, MetaQuotes Software Corp."
#property link      "http://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   double doubleA=10/100;
   double doubleB=10.0/100;
   Print("doubleA ",doubleA,", doubleB ",doubleB);
  }
//+------------------------------------------------------------------+


Результат:

doubleA 0.0, doubleB 0.1
Ром
1634
Ром 2015.07.31 20:55  
Maria Baburina:
Поняла, спасибо!

Это все из-за бухла) 

 

Mikhail Filimonov
5931
Mikhail Filimonov 2015.07.31 21:14  
Maria Baburina:
Здравствуйте! Подскажите, пожалуйста, почему при вычислении выражения (10/100) советник возвращает 0. И при использовании переменных и просто при константах. Тип double, т.е. должно получиться 0.1 без проблем. Блок с этим выражением был взят из другого кода, т.е. все по идее работало.

Чтобы не путаться пишите так:

double a_a = 10;
double b_b = 100;
double res = a_a/b_b;
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий