有可能得到一个 "精确 "的数值吗? - 页 2

 

但这个值

0.099999999

将返回0.1

)

 

那么上面引用的内容将更适合于TC的任务。

void OnStart()
  {
//---
   int DIGITS=2;
   string stroka=DoubleToString(0.099999999,8);
   int P=StringFind(stroka,".");
   Print(stroka);
   stroka=StringSubstr(stroka,0,P+DIGITS+1);
   Print(StringToDouble(stroka));
   Print(NL(DIGITS,0.099999999));
   
  }
//+------------------------------------------------------------------+
double NL (int DIGITS,double value) {
   double step=1/MathPow(10,DIGITS);
   return (MathFloor(value/step)*step);
}

返回。

2014.10.04 11:42:31.856 normalize EURUSD,H4: 0.09
2014.10.04 11:42:31.856 normalize EURUSD,H4: 0.1
2014.10.04 11:42:31.856 normalize EURUSD,H4: 0.10000000
 

我画出了一个函数,它的作用正是我想做的:精确地将一个字符串截断到指定的精度,与DoubleToStr不同

string Normalize (string Normalize_Parse, int Normalize_Number, string Normalize_Separator = ".")
{
   string Normalize_Before,
          Normalize_After;
   
   for (int i = 0; i <= StringLen (Normalize_Parse) - 1; i ++)
   {
      if (StringSubstr (Normalize_Parse, i, StringLen (Normalize_Separator)) == Normalize_Separator)
      {
         for (int ii = i + StringLen (Normalize_Separator); ii < i + StringLen (Normalize_Separator) + Normalize_Number; ii ++)
         {
            Normalize_After += StringSubstr (Normalize_Parse, ii, 1);
         }
         
         break;
      }
      
      Normalize_Before += StringSubstr (Normalize_Parse, i, 1);
   }
   
   return (Normalize_Before + (Normalize_After > 0 ? Normalize_Separator + Normalize_After : ""));
}

结果为 "0.09864724"。

Comment (Normalize (0.09864724, 2)); // 0.09

"0,-843158 " 的结果。

Comment (Normalize ("0,-843158", 3, ",-")); // 0,-843

与双重和类似的操作。

Comment ((double) Normalize (0.09, 2) * 5); // 0.45

我一直在搜索,这样的功能已经存在于MQL4(5?)如果不存在,为什么不在很久以前就添加?:)

 
WePlexus:

我画出了一个函数,它的作用正是我想做的:精确地将一个字符串截断到指定的精度,与DoubleToStr不同

结果为 "0.09864724"。

"0,-843158 " 的结果。

与双重和类似的操作。

我一直在搜索,这样的功能已经存在于MQL4(5?)如果不存在,为什么不在很久以前就添加?:)

这就是我所说的 "更容易" )
 
WePlexus:

我画出了一个函数,它的作用正是我想做的:精确地将一个字符串截断到指定的精度,与DoubleToStr不同

结果为 "0.09864724"。

"0,-843158 " 的结果。

与双重和类似的操作。

我一直在搜索,这样的功能已经存在于MQL4(5?)如果不存在,为什么不在很久以前就添加?:)

你在用一些奇怪的例子进行操作--这就是为什么不可能得出结论说你的函数工作正确。

以此为例。

如何离开=0.01999999999999999999--离开=0.01
 
abolk:
你在用角色外的例子进行操作 -- 所以你不能得出结论说你的函数工作正确。

以此为例。

如何离开=0.01999999999999999999--离开=0.01
检查了最后一个函数,它留下了0.01。
 

我还是不明白你想要什么。

如果你想在图表上看到0.098,而不是0.098,那就这么做吧!

int a=0.098 * 100。

双重d=a/100.0。

评论(StringFormat("%G", d )。

 
sanyooooook:
检查了最后一个函数,留下0.01
检查了你的函数 -- 留下0.02
 
abolk:
检查了你的函数 -- 留下0.02。

的确,0.02。

我的函数可能更繁琐,但它正好切断了0.01。

 
sanyooooook:
检查了最后一个函数,留下0.01
如何优化你的函数,从abolk 的例子中取出0.01