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

时间:2017-11-11 16:19:23

标签: mql4

无法解决为什么1/6会让我回归0以及如何解决它。

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

打印0.00000000

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

为什么:

上面的代码在发布的案例中提供了一对常量(恰好是 1 6

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

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

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

如何解决:

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