有可能得到一个 "精确 "的数值吗? - 页 3 1234567 新评论 Alexandr Bryzgalov 2014.10.04 10:11 #21 abolk: 检查了你的函数 -- 留下0.02。我的分界线对吗?void OnStart() { //--- int DIGITS=2; string stroka=DoubleToString(0.0199999999999,8); int P=StringFind(stroka,"."); Print(stroka); stroka=StringSubstr(stroka,0,P+DIGITS+1); Print(StringToDouble(stroka)); Print(NL(DIGITS,0.0199999999999)); Print(Normalize (0.0199999999999, 2)); } //+------------------------------------------------------------------+ double NL (int DIGITS,double value) { double step=1/MathPow(10,DIGITS); return (MathFloor(value/step)*step); } 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 : "")); }2014.10.04 11:56:06.199 normalize EURUSD,H4: 0.01 2014.10.04 11:56:06.199 normalize EURUSD,H4: 0.01 2014.10.04 11:56:06.199 normalize EURUSD,H4: 0.02 2014.10.04 11:56:06.199 normalize EURUSD,H4: 0.02000000 Alexandr Bryzgalov 2014.10.04 10:12 #22 WePlexus: 如何优化你的函数,从abolk 的例子中取出0.01?你指的是哪种功能?首先通过字符串或NL? Andrey F. Zelinsky 2014.10.04 10:13 #23 sanyooooook:而我的条件是什么呢?你接受了我的条件,却没有削减它。abolk: Alexandr Bryzgalov 2014.10.04 10:17 #24 abolk:你接受了我的条件,却没有削减它。只有8位数,编译器似乎将数字 0.019999999999999999归为0.02。所以输入是0.02。 Alexandr Bryzgalov 2014.10.04 10:18 #25 int DIGITS=2; Print(0.01999999999999999999); string stroka=DoubleToString(0.01999999999999999999,8); int P=StringFind(stroka,"."); Print(stroka); stroka=StringSubstr(stroka,0,P+DIGITS+1); Print(StringToDouble(stroka)); Print(NL(DIGITS,0.01999999999999999999)); Print(Normalize (0.01999999999999999999, 2)); 给予2014.10.04 12:17:13.637 normalize EURUSD,H4: 0.02 2014.10.04 12:17:13.637 normalize EURUSD,H4: 0.02 2014.10.04 12:17:13.637 normalize EURUSD,H4: 0.02 2014.10.04 12:17:13.637 normalize EURUSD,H4: 0.02000000 2014.10.04 12:17:13.637 normalize EURUSD,H4: 0.02 Alexandr Bryzgalov 2014.10.04 10:20 #26 )))),我很抱歉。 二进制有15个有效数字,你有更多的数字进来 Andrey F. Zelinsky 2014.10.04 10:29 #27 sanyooooook:)))),我很抱歉。 二进制有15个有效数字,而你有更多的数字进来了 好了,终于 -- 对这个问题有了一些建设性的讨论。 Andrey F. Zelinsky 2014.10.04 10:32 #28 sanyooooook:)))),我很抱歉。 doble有15个有效数字,而你有更多的数字进来。这是我的解决方案。double d=0.01999999999999999; double e=(int)(d*100)/100.0; Print("e=",e); 给出=0.01而如果你加上一个9。double d=0.019999999999999999; double e=(int)(d*100)/100.0; Print("e=",e); 那就是=0.02。 Petros Shatakhtsyan 2014.10.04 10:33 #29 abolk: 好了,终于 -- 对这个问题有了一些建设性的讨论。 你为什么需要这个。数据溢出。 TheXpert 2014.10.04 10:37 #30 abolk:这是我的解决方案。d*100这种操作会使数值失真 1234567 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
检查了你的函数 -- 留下0.02。
我的分界线对吗?
如何优化你的函数,从abolk 的例子中取出0.01?
你指的是哪种功能?
首先通过字符串或NL?
而我的条件是什么呢?
你接受了我的条件,却没有削减它。
你接受了我的条件,却没有削减它。
只有8位数,编译器似乎将数字 0.019999999999999999归为0.02。
所以输入是0.02。
给予
)))),我很抱歉。
二进制有15个有效数字,你有更多的数字进来
)))),我很抱歉。
二进制有15个有效数字,而你有更多的数字进来了
)))),我很抱歉。
doble有15个有效数字,而你有更多的数字进来。
这是我的解决方案。
给出=0.01
而如果你加上一个9。
那就是=0.02。好了,终于 -- 对这个问题有了一些建设性的讨论。
这是我的解决方案。
d*100
这种操作会使数值失真