初学者的问题 MQL5 MT5 MetaTrader 5 - 页 154 1...147148149150151152153154155156157158159160161...1503 新评论 Rorschach 2013.11.20 18:59 #1531 paladin800: 也就是说,你需要将1.33182转换成1.3318?你可以简单地切断小数点后的第5位数字,或将其四舍五入到第4位数字,例如,你会从1.33186得到1.3318或1.3319?我的问题是,是否存在一个错误。在我的例子中,当从double转换到int时,结果是少了一个。请自己检查。 double max=NormalizeDouble(1.33182,4); //double max=1.3318; Alert(int(max*10000));警报 应该发出13318,但它发出了13317。如果不 四舍五入到int,它将正确地给出13318.0。 sgreen 2013.11.20 19:44 #1532 告诉我在表达上是否有区别。if(bufferclose[1]<=MaxLine(1)-m_open_bar_error*ticksize && bufferopen[1]<=MaxLine(1)-m_open_bar_error*ticksize)иif(( bufferclose[1]<=MaxLine(1)-m_open_bar_error*ticksize) && ( bufferopen[1]<=MaxLine(1)-m_open_bar_error*ticksize)) Maxim Khrolenko 2013.11.20 20:30 #1533 sgreen:告诉我在表达上是否有区别。и如果你怀疑某件事情不对,就把它变成这样。if(bufferclose[1]<= ( MaxLine(1)-m_open_bar_error*ticksize ) && bufferopen[1]<= ( MaxLine(1)-m_open_bar_error*ticksize ) ) Vladimir Gomonov 2013.11.20 20:50 #1534 Rorschach:我的问题是,是否存在一个错误。在我的例子中,当从double转换到int时,结果是少了一个。请自己检查一下。 警报应该发出13318,但却发出了13317。因此,如果不 减少到int,则正确地给出了13318.0 警报并没有发出错误。重点是,归一化将数字引向二进制形式,它最接近 所要求的十进制模拟,而不一定与它多少吻合(在你的例子中)。 因为用有限的十进制分数表示的东西,不一定能用有限的 二进制表示。 表达式 int(max*10000)导致丢弃小数部分而不是四舍五入(即类似于MathFloor()而不是MathRound()),在你的例子中,归一化的数字 很可能正好等于13318,但是说13317,999999999997当以有限位数的小数形式输出时,会导致四舍五入到正确的(预期的)结果,而当.... 的小数部分被丢弃的时候你自己看吧。我希望我解释清楚了。 Vladimir Gomonov 2013.11.20 20:54 #1535 pronych: 是否有类似于夏普的部分? 或者如何做?没有类似的东西。你可以使用#include<partial_class_code.mqh>嵌入一段定义。有些人甚至以这种方式模仿多重继承。//我不这样做,我已经习惯了不这样做。:) sgreen 2013.11.20 20:55 #1536 paladin800:如果你怀疑有什么不对劲,就把它说出来。 我已经有了。只是好奇。 Maxim Khrolenko 2013.11.21 08:17 #1537 sgreen: 我已经做了。只是好奇。 我明白了。回到你之前的问题,记录的本质可以得出这样的比较。if (A<=B && C<=D) // 1 if ((A<=B) && (C<=D)) // 2 这些条目之间没有区别。同时,我建议你在if-os里面括上数学计算。if (A<=(B1+B2*B3) && C<=(D1-D2*D3)) Распределенные вычисления в сети MQL5 Cloud Network cloud.mql5.com Заработать деньги, продавая мощности своего компьютера для сети распределенных вычислений MQL5 Cloud Network Rorschach 2013.11.21 09:19 #1538 MetaDriver: 该警报不产生错误。重点是,归一化将一个数字引向二进制形式,它最 接近所要求的十进制模拟,而它可能不会在更大或更小(在你的例子中)的方向上与之重合。 因为用有限的十进制分数表示的东西,不一定能用有限的二进制分数表示。表达式 结果是放弃小数部分而不是四舍五入(即看起来更像MathFloor()而不是MathRound()),在你的例子中,归一化的数字 很可能是13317.9999999999997而不是13318。当以有限位数的小数形式输出时,会导致四舍五入到正确的(预期的)结果,而当.... 的小数部分被丢弃的时候你自己看吧。我希望我已经解释清楚了。谢谢,我明白了。还有一个问题,如果我不能不转换为int,那么我应该如何对抗? tungus 2013.11.21 09:36 #1539 你能告诉我在测试EA 时如何将经纪人的佣金考虑在内吗? Aleksey 2013.11.21 11:26 #1540 Rorschach:谢谢你,我明白了。另一个问题,如果你不能不转到int,你如何处理这个问题?而你要加几个ε值。 DBL_EPSILON 满足1.0+DBL_EPSILON !=1.0条件的最小的数字。 Документация по MQL5: Стандартные константы, перечисления и структуры / Именованные константы / Константы числовых типов www.mql5.com Стандартные константы, перечисления и структуры / Именованные константы / Константы числовых типов - Документация по MQL5 1...147148149150151152153154155156157158159160161...1503 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
也就是说,你需要将1.33182转换成1.3318?你可以简单地切断小数点后的第5位数字,或将其四舍五入到第4位数字,例如,你会从1.33186得到1.3318或1.3319?
我的问题是,是否存在一个错误。在我的例子中,当从double转换到int时,结果是少了一个。请自己检查。
警报 应该发出13318,但它发出了13317。如果不 四舍五入到int,它将正确地给出13318.0。告诉我在表达上是否有区别。
и
告诉我在表达上是否有区别。
и
如果你怀疑某件事情不对,就把它变成这样。
我的问题是,是否存在一个错误。在我的例子中,当从double转换到int时,结果是少了一个。请自己检查一下。
警报应该发出13318,但却发出了13317。因此,如果不 减少到int,则正确地给出了13318.0导致丢弃小数部分而不是四舍五入(即类似于MathFloor()而不是MathRound()),在你的例子中,归一化的数字 很可能正好等于13318,但是说13317,999999999997
当以有限位数的小数形式输出时,会导致四舍五入到正确的(预期的)结果,而当.... 的小数部分被丢弃的时候你自己看吧。
我希望我解释清楚了。
是否有类似于夏普的部分? 或者如何做?
没有类似的东西。你可以使用#include<partial_class_code.mqh>嵌入一段定义。
有些人甚至以这种方式模仿多重继承。//我不这样做,我已经习惯了不这样做。:)
如果你怀疑有什么不对劲,就把它说出来。
我已经做了。只是好奇。
我明白了。回到你之前的问题,记录的本质可以得出这样的比较。
这些条目之间没有区别。同时,我建议你在if-os里面括上数学计算。
if (A<=(B1+B2*B3) && C<=(D1-D2*D3))
该警报不产生错误。重点是,归一化将一个数字引向二进制形式,它最 接近所要求的十进制模拟,而它可能不会在更大或更小(在你的例子中)的方向上与之重合。 因为用有限的十进制分数表示的东西,不一定能用有限的二进制分数表示。表达式
结果是放弃小数部分而不是四舍五入(即看起来更像MathFloor()而不是MathRound()),在你的例子中,归一化的数字 很可能是13317.9999999999997而不是13318。
当以有限位数的小数形式输出时,会导致四舍五入到正确的(预期的)结果,而当.... 的小数部分被丢弃的时候你自己看吧。
我希望我已经解释清楚了。
谢谢,我明白了。
还有一个问题,如果我不能不转换为int,那么我应该如何对抗?
谢谢你,我明白了。
另一个问题,如果你不能不转到int,你如何处理这个问题?
而你要加几个ε值。
DBL_EPSILON
满足1.0+DBL_EPSILON !=1.0条件的最小的数字。