绕过MQL4和MQL5中的Digits(),获取任何数字的小数位数(不仅仅是引号)。 - 页 8 123456789101112131415...22 新评论 Konstantin Gruzdev 2018.11.12 22:23 #71 Igor Makanu:不,它不会工作... 哦,对了,我忘了,这是在明知是小于零的数字的情况下做出的,因为它被用于批次规范化。修正了它,现在可以了。 #define EPSILON 0.000000001 #define MORE(A,B) ((A)-(B)>EPSILON) int Digit(double value) { int digits=0; value=MathMod(value,1.0); while(MORE(1.0/MathPow(10,digits),value)) digits++; return(digits); } //+------------------------------------------------------------------+ int DoubleToDigits(double value) { double absvalue=NormalizeDouble(fabs(value-int(value)),15); int res=StringLen(string(absvalue))-2; return(res<=0?0:res); } //+------------------------------------------------------------------+ void OnStart() { double f = 122334550.007; Print("1. DoubleToDigits() = ",DoubleToDigits(f)); Print("1. Digit() = ",Digit(f)); f = 0.007; Print("2. DoubleToDigits() = ",DoubleToDigits(f)); Print("2. Digit() = ",Digit(f)); } 结果。 2018.11.13 05:18:40.599 Digits (EURUSD,M1) 1. DoubleToDigits() = 11 2018.11.13 05:18:40.599 Digits (EURUSD,M1) 1. Digit() = 3 2018.11.13 05:18:40.599 Digits (EURUSD,M1) 2. DoubleToDigits() = 3 2018.11.13 05:18:40.599 Digits (EURUSD,M1) 2. Digit() = 3 Алексей Тарабанов 2018.11.12 22:31 #72 我将把我从外汇赚来的钱投资在Jolly Trader酒吧。我将在伦敦开业。 Igor Makanu 2018.11.12 22:37 #73 Konstantin Gruzdev:哦,对了,我忘了,这是在明知是小于零的数字的情况下做出的,因为它被用于批次规范化。修正了它,现在可以了。 结果。 没有,没有作用。 double f = 122334550.00999; 结果。 2018.11.13 02:36:31.034 tst (EURUSD,M30) 1.Digit() = 3 Алексей Тарабанов 2018.11.12 22:54 #74 主啊,请给这些人的孩子学习物理的机会。 Konstantin Gruzdev 2018.11.12 23:29 #75 Igor Makanu:不,这没有用。哦,对了,我知道错在哪里了,我会改正的。 Alexey Viktorov 2018.11.13 07:17 #76 Алексей Тарабанов: 主啊,请给这些人的孩子学习物理的机会。为什么,父母可以不做? Mesaoria 2018.11.13 12:22 #77 首先,回答你自己--为什么 你需要 知道小数点后有多少个数字?要做什么? 使用 "带数字的双倍数 "的唯一正确方法是,在要解决的问题中,事先 知道一些给定的 精度来使用它。 其他都是胡说八道。 我甚至不谈双数modulo的值越大,就越不准确,任何算法(尤其是字符串转换,那是超出范围的)都会失败。 Igor Makanu 2018.11.13 13:11 #78 Mesaoria:(特别是转换为字符串,它是不符合规定的)会失败。这些是MQL的代码,不是标准C++的代码,很明显,在C++中,字符串处理会很慢,在MQL中,内置函数比自写的函数更快。 Mesaoria 2018.11.13 15:05 #79 Igor Makanu:这是MQL的代码,不是标准C++的代码,很明显,在C++中,字符串处理会很慢,在MQL中,内置函数比自写函数更快。我不是这个意思。将一个dule转换为一个字符串,然后计算其中的所有字符,这种想法简直是一派胡言。无论你做什么。 Alexandr Sokolov 2018.11.13 16:20 #80 Mesaoria:我说的根本不是这个意思。将一个dule转换为一个字符串,然后就可以计算字符串中的字符,这种想法完全是无稽之谈。无论你做什么。 是的,我的版本可能不是最好的,但由于我从来没有发现任何关于它的东西--这是我自己能想到的最好的,我在上面的评论中写了它,而你从来没有提出你自己的版本。 123456789101112131415...22 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
不,它不会工作...
哦,对了,我忘了,这是在明知是小于零的数字的情况下做出的,因为它被用于批次规范化。修正了它,现在可以了。
结果。
哦,对了,我忘了,这是在明知是小于零的数字的情况下做出的,因为它被用于批次规范化。修正了它,现在可以了。
结果。
没有,没有作用。
double f = 122334550.00999;
结果。
2018.11.13 02:36:31.034 tst (EURUSD,M30) 1.Digit() = 3
不,这没有用。
哦,对了,我知道错在哪里了,我会改正的。
主啊,请给这些人的孩子学习物理的机会。
为什么,父母可以不做?
首先,回答你自己--为什么 你需要 知道小数点后有多少个数字?要做什么?
使用 "带数字的双倍数 "的唯一正确方法是,在要解决的问题中,事先 知道一些给定的 精度来使用它。
其他都是胡说八道。
我甚至不谈双数modulo的值越大,就越不准确,任何算法(尤其是字符串转换,那是超出范围的)都会失败。
(特别是转换为字符串,它是不符合规定的)会失败。
这些是MQL的代码,不是标准C++的代码,很明显,在C++中,字符串处理会很慢,在MQL中,内置函数比自写的函数更快。
这是MQL的代码,不是标准C++的代码,很明显,在C++中,字符串处理会很慢,在MQL中,内置函数比自写函数更快。
我不是这个意思。将一个dule转换为一个字符串,然后计算其中的所有字符,这种想法简直是一派胡言。无论你做什么。
我说的根本不是这个意思。将一个dule转换为一个字符串,然后就可以计算字符串中的字符,这种想法完全是无稽之谈。无论你做什么。