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

 
Mesaoria:

我说的根本不是这个意思。将一个dule转换为一个字符串,然后就可以计算字符串中的字符,这种想法完全是无稽之谈。无论你做什么。

这有什么大不了的?到目前为止,这个选项是最快、功能最强、保证正确的。你有什么选择?

 
Alexandr Sokolov:
是的,我的变体可能不是最好的,但由于我以前从未发现过有关它的东西,这是我自己想出的最好的,我在上面评论过,而你没有提出你自己的变体。

我比较了这些变体。

int ds(double v){
   string s=(string)v;
   int l=StringLen(s);
   int n=l-StringFind(s,".",0)-1;
   if(StringSubstr(s,l-1,1)=="0")n--;
   return(n);
}

int d(double x){
   int n;
   for(n=0;n<8;n++){
      if(x==NormalizeDouble(x,n)){
         return(n);
      }
   }
   return(n-1);
}

字符串变体的速度稍快,而且它不像d()那样限制在8位数。而对正确性的保证是通过终端显示数字的方式来计算的。

我选择了转换为字符串的变体。

 
Dmitry Fedoseev:

这有什么大不了的?到目前为止,这个选项是最快、最实用的,保证是正确的。你有什么选择?

你能说出至少一个应用上述算法的案例吗?

 
Mesaoria:

你能说出至少一个应用上述算法的案例吗?

有一种情况是交易面板在文本字段中以正确的小数位数 输出手数。这是唯一的情况。

 
Dmitry Fedoseev:

有一种情况是交易面板在文本框中以正确的小数位数 输出手数。这是唯一的情况。

也就是说,如果是1手,它输出 "1",如果是0.01手,它输出 "0.01"?

 
Mesaoria:

所以它在1手的情况下输出 "1",在0.01手的情况下输出 "0.01"?

并非如此。这取决于最小的地段和地段等级。如果最小手数是0.01,那么1就显示为1.00。

 
Dmitry Fedoseev:

并非如此。取决于最小地段和地段增量。如果最小手数是0.01,那么1就显示为1.00。

O.o.

所以事实证明,你没有使用你的函数,但仍然显示类似DoubleToString(LotSize, <some const value>)的东西,不是吗?

 
Mesaoria:

O.o

因此,事实证明,你没有使用你的函数,但仍然输出类似DoubleToString(LotSize, <some const value>)的东西,不是吗?

是的,但你必须知道要输出多少个小数位。

 
Dmitry Fedoseev:

是的,但你必须知道要输出多少个小数位。

换句话说,你是否使用用户输入的min.lot(或lot增量)来确定这个值有多少个小数位,然后保存它来规范未来的值?

 
Mesaoria:

所以你根据用户输入的最小手数(或手数增量)确定小数点后有多少个数字,然后保存它以规范未来的数值?

你有什么不明白的?价格有Digits(),而成交量却没有。这是它的计算方式。

为什么你需要量的数字?我们需要价格数字的原因也是如此!