Теряется единичка при простом арифметическом вычислении

 

Подскажите, пожалуйста. Не могу понять как такое может быть.

Вот часть кода:

    Alert("До: ","O = ",O,"; L = ",L,"; O-L = ",O-L,"; Point_ = ",Point_,"; (O-L)/Point_ = ",(O-L)/Point_);
    LP=(O-L)/Point_;
    Alert("После: ","O = ",O,"; L = ",L,"; O-L = ",O-L,"; Point_ = ",Point_,"; (O-L)/Point_ = ",(O-L)/Point_,"; LP = ",LP);

Вот результат:

Арифметика проста: (0,6041-0,5741)/0,0001=300.

До оператора присваивания считает верно.

Как только значение этого выражения присвоено переменной LP, - тут же на ровном месте пропала единичка. ...Мистика :)

В данном случае высчитываются размеры стопов на рыночном ордере.

Причем эта проблема не на всех валютах.

Переменная LP объявлена целой - int.

Поменял тип переменной LP с int на double. Теперь и после присвоения LP = 300. Но вылезла другая ошибка.

Сразу же за этим вычислением следует оператор if, в условии которого проверяется значение переменной LP:

       Alert("PP = ",PP,"; LP = ",LP);
        if(PP==50&&LP==300) NZDUSD_Stops="OK";//Уставные стопы
       Alert("NZDUSD_Stops = ",NZDUSD_Stops);

В результате:

Вот почему такое происходит - ума не приложу.

Объясните, пожалуйста,  кто сталкивался с таким или в курсе, что не так.

Заранее благодарен.

 
Success_Lord >>:

Поменял тип переменной LP с int на double. Теперь и после присвоения LP = 300. Но вылезла другая ошибка.

Сразу же за этим вычислением следует оператор if, в условии которого проверяется значение переменной LP:

Сравнивать переменную double без нормализации с целым числом нельзя. Нужно сначала:

LP = NormalizeDouble(LP, 0);

а потом только сравнивать

 
Scriptong >>:

Сравнивать переменную double без нормализации с целым числом нельзя.

Спасибо, действительно при нормализации работает как нада. Удивляет только то, что не всегда эта нормализация нужна. Даже не на разных валютах, а на одной и той-же, но в разное время.

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