2015-04-22 1 views
3

У меня очень простая инструкция if, которая не работает должным образом.Ошибка выполнения скрипта Monodevelop C#

Моя главная проблема в том, что немедленное окно оценивает, если заявление по-разному, то выполнение кода:

if(FreeProductStorageVolume < product.Volume * quantity) 
    { 
     Debug.Log(FreeProductStorageVolume); 
     Debug.Log(product.Volume); 
     Debug.Log(quantity); 
     Debug.Log(product.Volume * quantity); 
     canProduce = false; 
    } 

все переменные являются поплавки

enter image description here

все говорит о том, что точка останова в строка 824 не должна ударяться.

Даже окно Immediate оценивает оператор if() как false.

что-то подобное произошло с кем-то еще?

ответ

6

Это похоже на проблему с плавающей точкой. Это выражение:

FreeProductStorageVolume - quantity * product.Volume. 

, кажется, оценить с положительной, однако, очень небольшое количество, например 1E-20

+0

Моя главная проблема в том, что немедленное окно оценивает, если заявление по-разному, то выполнение кода. Почему это произойдет? Даже если результат равен 1E-20, он должен быть таким же в коде и в непосредственном окне. – JinJi

+0

Непосредственное окно может оценивать результаты несколько иначе, например, использовать меньшую точность. – Jaco

+0

Это беспокоит меня намного больше, чем нужно :) Они не должны допускать таких ошибок! – JinJi