无法解决为什么1/6会让我回归0以及如何解决它。
Print(1/6);
Print(DoubleToString((1/6),8));
打印0.00000000
答案 0 :(得分:1)
表达式中需要一个双精度数。尝试:Print(1/6.0)
;
答案 1 :(得分:0)
上面的代码在发布的案例中提供了一对常量(恰好是 1
和 6
。
MQL4
语言是一种编译语言,并且(在扩展#define宏之后,#include和类似的预编译步骤取代了它们)编译阶段的编译器“ 读取“您的代码和词汇分析,打算做什么。
在代码中看到了1 / 6
的表达式,编译器知道,在运行时生态系统中,没有什么可以在运行时更改这部分代码,因此它试图减少这部分静态值代码。
编译器是硬连线的,以便汇编代码执行文件格式(一个.MQ4
- 文件),它将 - 毫不奇怪 - 直接0
,如同编译器从静态代码分析中决定 - 一个常量,派生自编译时已知的整数文字常量1
和6
,不会在运行时浪费一个纳秒(重新) - 评估0
的编译时已知值。
double enumerator = 1,
divisor = 6;
Print( enumerator / divisor );
Print( DoubleToString( enumerator / divisor ),
8
)
);