MQL4:无法锻炼如何获得 1/6 的十进制值

MQL4: can't workout how to get decimal value of 1/6

无法弄清楚为什么 1/6 总是返回 0 以及如何解决它。

Print(1/6);
Print(DoubleToString((1/6),8));

打印 0.00000000

表达式中需要一个双数。尝试:Print(1/6.0)

为什么:

上面的代码给出了一对常量(恰好是 16已发布案例 ).

MQL4 语言是一种编译语言,并且(在 #define 宏扩展后,#include 和类似的预编译步骤已经取代了它们)编译器在编译阶段“读取”您的代码和词法分析,打算做什么

在代码中看到了1 / 6的表达式,编译器知道,在运行时间,在运行时间之内,没有什么可以改变这部分代码生态系统,因此它试图减少这部分静态值代码。

编译器是硬连线的,以便 assemble 代码执行文件格式(一个 .MQ4 文件),它将在其中 - 毫不奇怪 - 直接 0,因为编译器根据静态代码分析决定——一个常量,派生自编译时已知的整数文字常量对 16,不要浪费一个纳秒运行是时候(重新)评估 0 的编译时已知值了。

如何解决:

double enumerator = 1,
       divisor    = 6;
Print(                 enumerator / divisor );
Print( DoubleToString( enumerator / divisor ),
                       8
                       )
       );