绕过MQL4和MQL5中的Digits(),获取任何数字的小数位数(不仅仅是引号)。 - 页 13 1...67891011121314151617181920...22 新评论 Ilya Malev 2018.12.06 19:46 #121 Dmitry Fedoseev:这个:F/=0.0000001;是值得怀疑的。我同意,测试器中的数十亿可能会出现故障,否则就没问题 ) Ilya Malev 2018.12.06 20:03 #122 Ilya Malev 2018.12.06 21:27 #123 而这是两倍的速度,同样的结果 int dtd2(double f) { long l=long(f/0.0000001); int d = 0, i = 10000000; while( d < 7 && l % i > 0 ) { i /= 10; d ++ ; } return d ; } Dmitry Fedoseev 2018.12.06 22:01 #124 Ilya Malev:而这是两倍的速度,同样的结果 这不是你在这里需要的速度,它在inite中或通过GUI事件完成一次。这里最主要的是操作的正确性。如果一个小数被分割,而小数部分 被丢弃,工作的正确性将从何而来?也许它在某种程度上奇迹般地正常工作,但你需要一个令人信服的测试。 Ilya Malev 2018.12.06 22:08 #125 Dmitry Fedoseev:这里需要的不是速度,是在inite中或由GUI事件完成一次。这里最主要的是操作的正确性。如果它是在划分小数点并丢弃小数部分,怎么能正确工作?也许它在某种程度上奇迹般地正常工作,但你需要一个令人信服的测试。好吧,如果你发现了错误(除了像1kkk+这样的数值),我将感谢你的提示。 Dmitry Fedoseev 2018.12.06 22:19 #126 Ilya Malev:好吧,如果你发现了bug(除了像1kkk+这样的数值),我将感谢你的提示。我也不会去找它们,因为我不打算使用它们。只是好奇,你怎么会有这么大的信心,认为一切都会是正确的? Ilya Malev 2018.12.06 22:25 #127 Dmitry Fedoseev:我也不会去找它,因为我不打算使用它。我只是想知道,你怎么能如此肯定一切都会正确?我检查了随机引号和任意数字,如0.7,0.07,50000000.9991等,此外我还做了比较速度测试。我只是要使用这个功能,但不是一次性的,而是更经常地使用。但一般来说,如果你不拿着手鼓跳舞,通常的Digits 就很足够了...... Dmitry Fedoseev 2018.12.06 23:35 #128 找到一个数字:99999999.9999 - dtd2()返回7,我的是4。但这是小事一桩。总而言之,这个功能很好,我终于明白了。 Ilya Malev 2018.12.07 14:19 #129 Dmitry Fedoseev:找到一个数字:99999999.9999 - dtd2()返回7,我的是4。但这是小事一桩。总而言之,这个功能很好,我终于理解了它。嗯,这就是我说的,我自己在上面给出了几个这样的数字。 Ilya Malev 2018.12.07 14:53 #130 #property strict #define test(M,EX) {uint mss=GetTickCount();int nn=(int)pow(10,M);for(int tst=0;tst<nn;tst++){EX;}printf("loops=%i ms=%u",nn,GetTickCount()-mss);} int d(double x){ int n; for(n=0;n<8;n++){ if(x==NormalizeDouble(x,n)){ return(n); } } return(n-1); } int dtd2(double f) { long l=long(f/0.0000001); int d = 0, i = 10000000; while( d < 7 && l % i > 0 ) { i /= 10; d ++ ; } return d ; } int dtd3(double f) { long l=long(f/0.0000001); if(l%10==0) if(l%100==0) if(l%1000==0) if(l%10000==0) if(l%100000==0) if(l%1000000==0) if(l%10000000==0) return 0; else return 1; else return 2; else return 3; else return 4; else return 5; else return 6; else return 7; } void OnStart() { srand(GetTickCount()); Print("d:"); test(7,int k=rand()%Bars;double f=Close[k]*rand()/(rand()+1.0);d(f)) Print("dtd2:"); test(7,int k=rand()%Bars;double f=Close[k]*rand()/(rand()+1.0);dtd2(f)) Print("dtd3:"); test(7,int k=rand()%Bars;double f=Close[k]*rand()/(rand()+1.0);dtd3(f)) } 1...67891011121314151617181920...22 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
这个:F/=0.0000001;是值得怀疑的。
我同意,测试器中的数十亿可能会出现故障,否则就没问题 )
而这是两倍的速度,同样的结果
而这是两倍的速度,同样的结果
这不是你在这里需要的速度,它在inite中或通过GUI事件完成一次。这里最主要的是操作的正确性。如果一个小数被分割,而小数部分 被丢弃,工作的正确性将从何而来?也许它在某种程度上奇迹般地正常工作,但你需要一个令人信服的测试。
这里需要的不是速度,是在inite中或由GUI事件完成一次。这里最主要的是操作的正确性。如果它是在划分小数点并丢弃小数部分,怎么能正确工作?也许它在某种程度上奇迹般地正常工作,但你需要一个令人信服的测试。
好吧,如果你发现了错误(除了像1kkk+这样的数值),我将感谢你的提示。
好吧,如果你发现了bug(除了像1kkk+这样的数值),我将感谢你的提示。
我也不会去找它们,因为我不打算使用它们。只是好奇,你怎么会有这么大的信心,认为一切都会是正确的?
我也不会去找它,因为我不打算使用它。我只是想知道,你怎么能如此肯定一切都会正确?
我检查了随机引号和任意数字,如0.7,0.07,50000000.9991等,此外我还做了比较速度测试。我只是要使用这个功能,但不是一次性的,而是更经常地使用。但一般来说,如果你不拿着手鼓跳舞,通常的Digits 就很足够了......
找到一个数字:99999999.9999 - dtd2()返回7,我的是4。但这是小事一桩。总而言之,这个功能很好,我终于明白了。
找到一个数字:99999999.9999 - dtd2()返回7,我的是4。但这是小事一桩。总而言之,这个功能很好,我终于理解了它。
嗯,这就是我说的,我自己在上面给出了几个这样的数字。