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

 
A100:

你需要一个

以致于

其结果是。4

正好四个?让我们行动起来吧。

 
fxsaber:

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

他恰恰需要这样一个函数,因为(正如你正确指出的)不是所有的数字都可以精确地表示为双数,这意味着在不指定精度的情况下解决问题是没有意义的(因为在一般情况下会导致荒谬的结果)。

 
A100:

他需要的正是这一点,因为(正如你正确指出的)不是所有的数字都能准确地表示为双数,这意味着在不指定准确度的情况下解决问题是没有意义的(因为一般来说,它导致了荒谬的结果)。

在不改变小数点位数 的情况下,有什么办法可以指定精度,或者如何消除我在版本中描述的缺点?对我自己来说,我只发现了(字符串)值

 
Alexandr Sokolov:

在不改变小数点位数 的情况下,有什么办法可以指定精度,或者如何消除我在版本中描述的缺点?对我自己来说,我只发现了(字符串)值

我猜你的意思是在什么范围内寻找最后的非零。

 

我试着通过MathMod()进行小数位数的计算,连续除数0.1,然后是0.01......0.000(15个零)1,没有成功,数字的准确性不断 "浮动",每次都需要归一化,如果使用归一化,那么就更容易比较你想要的数字和归一化的符号是什么--如果不同,那么找到最后的符号

HH:还有一个选择,没有时间检查--将一个没有整数部分的实数乘以10^16,并将其全部保存在long中,然后除以10并检查除法的余数,如果=0,则再次除以

 
Igor Makanu:

ZS:还有一个选择,我还没有时间检查--将一个没有整数部分的实数乘以10^16,并全部保存在lon中,然后除以10,并检查除法的余数,如果=0,则再除。

这是不可能的。

 
使用双倍的Point()。
十进制对数,符号弃权...
 
Aliaksandr Hryshyn:
使用双倍的Point()。
十进制对数,符号被丢弃...

也经过测试,不可能。

就这样了。

void OnStart()
{
 double p = 0.07;
 Print(p);
}/*******************************************************************/

它给出了这样的结果

2018.11.05 10:43:05.138 !00 (GBPJPY,H1) 0.07000000000000001
猜测三倍的对数是什么...
 
Alexey Viktorov:
也测试过,不能用。
为什么不呢?进一步四舍五入到整数。
 
看看Point()函数 返回什么。