绕过MQL4和MQL5中的Digits(),获取任何数字的小数位数(不仅仅是引号)。 - 页 4

 
void OnStart()
{
        double price =  500000000.0001;
        Print( price, ":", d( price ));
}

结果:500000000.0001:4

4,但不是8

 
好的,那么...如果你喜欢,就沐浴在这种快乐中吧。
 
A100:

你猜对了那么有多少个小数位呢? 8?

我不需要接受测试。

  Print(NormalizeDouble(1234567890 + 1 e-7, 8) == 1234567890); // true
  Print(1234567890 + 1 e-7 == 1234567890); // true
 
fxsaber:

我不需要被检查。

不过,你已经纠正了你的代码--所以检查是有帮助的

 
打印( 12345+1e-7)
 
A100:

尽管如此,你还是纠正了你的代码

看看这些代码是从哪里拉来的。以及它的实际目的是什么。如果不清楚的话--对于价格。

代码中没有任何防骗措施,因为它并不打算被这样的用户使用。

在讨论过程中,结果发现,如果代码被公布,就必须实施防骗措施。否则,它将是5页的狗屎。

所以,确实是纠正了。再一次,具有无限位数的数字是常态。

 
Dmitry Fedoseev:

我知道NormalizeDouble 是如何工作的,因为我玩过它的完整模拟。

这在很大程度上取决于你想得到什么数字。如果是双重代表,你的代码会给出一个不同的值。如果是数字常数的数字,则是正确的(并不总是)。

 
又来了,又来了,又来了,又来了,又来了,又来了,又来了。
 
fxsaber:

这在很大程度上取决于你需要得到什么。

你需要一个

int f( double );

以致于(特别是)

void OnStart()
{
        Print( f( NormalizeDouble( 500000000.0001, 4 )));
}

结果等于。4

 
A100:

你需要一个

其结果是。4

也许这正是你需要的功能。回答了TS的问题。