在MT4中通过NormalizeDouble对数字进行四舍五入 - 页 8

 
Dmitry Fedoseev:

好了,错了。

减法,归一到两位数,然后再归一。

那就试试吧 :)

 
Event:

那就试试吧 :)

有什么可以尝试的呢?这是很清楚的。减法的结果是非正常化的,所以如果你不正常化到两位数,有时会有意外。
 
Event:

你需要哪一个?

你需要知道绳子的长度 吗?- 你确定你有正确的树枝吗?

代码?

如果像我这样超过2行,那么你的代码就比较复杂了。

 
Vasyl Nosal:

代码?

如果像我这样超过2行,那么你的代码就比较复杂了。

你没有仔细阅读你的帖子。

我给了你代码--它有一行。

 
Event:

你没有仔细阅读帖子。

我给了你代码--它里面有一行。

这很好。我在我的代码中这样写1.15 normalise:)))))))))))))))))))))))))))))))))))))))))))))))))))
 
Vasyl Nosal:

+++

然而,如果一个数字超过了小数点后15位,它仍然必须以某种方式被截断,否则它将无法正常工作。

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   ushort  Characters_delete=15;
   for(int i=0;i<=Characters_delete;i++)
     {
      double v1=1.123456789012345;

      v1=DoubleCrop(v1,i,Characters_delete);

      Print("v1 = ",i," = ",DoubleToString(v1,Characters_delete-i));
     }
   Print("---");
  }
//+------------------------------------------------------------------+
//| Double Crop function                                             |
//+------------------------------------------------------------------+
double DoubleCrop(double value,int ii,ushort  Characters)
  {
   string data="",resoult="";
   data=DoubleToString(value,Characters);
   resoult=StringSubstr(data,0,StringLen(data)-ii);
   return StringToDouble(resoult);
  }
//+------------------------------------------------------------------+
 
Event:

那就试试吧 :)

用零和用负数都是错的。有了积极的,令人惊讶的,没有任何意外的,正确的。
 

Vasyl Nosal:

extern ushort Characters_delete = 1;

///////////////////////////////////////////
string data=DoubleToString(Bid,Digits);
string resoult=StringSubstr(data,0,StringLen(data)-Characters_delete);  

呵。那是错误的方式。完全错误的结果。
 
Dmitry Fedoseev:
它对零和负数都是错误的。有了积极的,令人惊讶的,没有意外的,是正确的。

负的应该加到(如果四舍五入时Normalize增加modulo)。

而且可能什么都不做,以零为代价。

如果应用于一个报价--其成为<=0的概率很小......:)

 
关于四舍五入的八页。我想这曾经是四年级的内容:(