mql5语言的特点、微妙之处以及技巧 - 页 158 1...151152153154155156157158159160161162163164165...247 新评论 traveller00 2020.01.12 21:47 #1571 有一个矩阵,充满了大的,大约10e60,和小的,如1e-40的值。而有一个代码是这样的 for(k=-16;k<=16;++k) { double Tmp1=(double)(DoubleToString(Matrix[i][j],k)); double Tmp2=(double)((string)Matrix[i][j]); if(Tmp1==Tmp2) break; } 在大约27%的情况下,k=-15。在其他情况下,k=-16。因此,有一个问题:是否有办法用更严格的转换函数取代(字符串)Matrix[i][j] 操作?或者,也许有一个函数可以截断一些小数位?NormalizeDouble 是不对的,它将把1.12345678e-40截断为0,我希望它在小数点后截断。或者转换为(字符串)有自己的生命,不能通过函数表达?谢谢你。 fxsaber 2020.01.12 21:51 #1572 traveller00: 差异的模数。 traveller00 2020.01.12 21:56 #1573 fxsaber: 差异的模数。 你能不能说得更具体一点?也许有一个代码例子?什么和什么之间的区别? 关键是这样的双数转换(double)((string)Matrix[i][j]);; 会在小数点之后截断不可控的字符数。我想保持这种截断=一方面能够重复,另一方面能够控制这个字符数。 fxsaber 2020.01.12 22:14 #1574 traveller00: 你能不能说得更具体一点?也许有一个代码例子?什么和什么之间的差异? if (MathAbs(Value1 - Value2) < Epsilon) traveller00 2020.01.12 22:45 #1575 啊,我明白你的意思了。不,这个问题有点不同。这里的比较只是作为一个例子来说明,我们不能通过(double)((string)Matrix[i][j]); 来代替通过DoubleToString 的转换。事实上,眼下的任务不是比较。确切地说,是通过这种双重转换,对准确性进行了一定的重置。一方面,我想通过(string) 来重复剪裁,另一方面,我希望能够像DoubleToString 那样控制剪裁的精度。 而作为一个附带的问题,会不会是这些皈依者的做法不同,过着各自不相干的生活? Aleksey Mavrin 2020.01.12 22:54 #1576 traveller00:啊,我明白你的意思了。不,这个问题有点不同。这里的比较只是作为一个例子来说明,我们不能通过(double)((string)Matrix[i][j]); 来代替通过DoubleToString 的转换。事实上,眼下的任务不是比较。确切地说,是通过这种双重转换,对准确性进行了一定的重置。一方面,我想通过(string) 来重复剪裁,另一方面,我希望能够像DoubleToString 那样控制剪裁的精度。顺便说一句,我想知道这些转换是否以不同的方式进行,并过着各自不相关的生活。 我不明白为什么NormalizeDouble 和DoubleToString不能满足 你,它们有你想要的任何精度,或者你想要一些精度,但你不知道它是什么? traveller00 2020.01.13 07:31 #1577 我同意,这项任务并不完全透明。因为我正试图把某种测试的拐杖放在一起。 说有一个数字1.0123456789e-50。我需要对它进行精确的四舍五入,以便。 1.默认情况下,它通过(字符串) 进行双重转换。 2.如果需要,可以控制精度。 因此,NormalizeDouble 是不合适的,它将直接使这个数字无效。而DoubleToString 不允许重复步骤1的结果。 问题是由下一个问题发展而来的。正如我在上面写的,有一个矩阵。该矩阵的逆值被计算出来。有时(也许是由于double的精度限制造成的错误),矩阵变成了退化的,无法计算出逆值。但如果你把精度降低一些,你仍然能够计算出反数。这就是为什么我想进行一些测试,并得到一些统计数字,以确定结果与真实的结果相似的程度。在大多数情况下,通过(字符串) 的双重转换可以解决这个问题。但有时这还不够,我希望能够控制切割的精度。而DoubleToString,即使精度为-16到16,在大多数情况下也不能解决问题。 Yurixx 2020.01.17 18:16 #1578 你能告诉我吗,请告诉我。 在指标中,系列的顺序,例如close[],是由ArraySetAsSeries() 设置一次还是以其他方式设置? 是在OnCalculate()还是在OnInit()中完成? 我遇到了一个令人困惑的情况。 close[]中的订单,在第一个tick上被AS_SERIES设置,在下一个tick上自发地改变为正常的,即!AS_SERIES。 我在代码中没有发现任何这样做的理由。 Artyom Trishkin 2020.01.17 18:30 #1579 Yurixx:你能告诉我吗,请告诉我。在指标中,系列的顺序,例如close[],是由ArraySetAsSeries()设置一次还是以其他方式设置?是在OnCalculate()还是在OnInit()中完成?我遇到了一个令人困惑的情况。close[]中的订单,在第一个tick上被AS_SERIES设置,在下一个tick上自发地改变为正常的,即!AS_SERIES。我没有在代码中找到这个原因。 而且你不会在OnInit()中看到close[] 数组。而其他预定义的OnCalculate()参数 则没有。 因此,结论是--只在OnCalculate()中。 Yurixx 2020.01.17 20:30 #1580 Artyom Trishkin: 而在OnInit()中,你不会看到close[] 数组。而其他预定义的OnCalculate()参数都没有。 因此,结论是--只在OnCalculate()中。 我得出了同样的结论。))) 设置一次这个命令就够了,还是应该在每一次交易 中都这样做,还有待观察。 1...151152153154155156157158159160161162163164165...247 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
有一个矩阵,充满了大的,大约10e60,和小的,如1e-40的值。而有一个代码是这样的
差异的模数。
差异的模数。
你能不能说得更具体一点?也许有一个代码例子?什么和什么之间的区别?
关键是这样的双数转换(double)((string)Matrix[i][j]);; 会在小数点之后截断不可控的字符数。我想保持这种截断=一方面能够重复,另一方面能够控制这个字符数。
你能不能说得更具体一点?也许有一个代码例子?什么和什么之间的差异?
啊,我明白你的意思了。不,这个问题有点不同。这里的比较只是作为一个例子来说明,我们不能通过(double)((string)Matrix[i][j]); 来代替通过DoubleToString 的转换。事实上,眼下的任务不是比较。确切地说,是通过这种双重转换,对准确性进行了一定的重置。一方面,我想通过(string) 来重复剪裁,另一方面,我希望能够像DoubleToString 那样控制剪裁的精度。
而作为一个附带的问题,会不会是这些皈依者的做法不同,过着各自不相干的生活?
啊,我明白你的意思了。不,这个问题有点不同。这里的比较只是作为一个例子来说明,我们不能通过(double)((string)Matrix[i][j]); 来代替通过DoubleToString 的转换。事实上,眼下的任务不是比较。确切地说,是通过这种双重转换,对准确性进行了一定的重置。一方面,我想通过(string) 来重复剪裁,另一方面,我希望能够像DoubleToString 那样控制剪裁的精度。
顺便说一句,我想知道这些转换是否以不同的方式进行,并过着各自不相关的生活。
我不明白为什么NormalizeDouble 和DoubleToString不能满足 你,它们有你想要的任何精度,或者你想要一些精度,但你不知道它是什么?
我同意,这项任务并不完全透明。因为我正试图把某种测试的拐杖放在一起。
说有一个数字1.0123456789e-50。我需要对它进行精确的四舍五入,以便。
1.默认情况下,它通过(字符串) 进行双重转换。
2.如果需要,可以控制精度。
因此,NormalizeDouble 是不合适的,它将直接使这个数字无效。而DoubleToString 不允许重复步骤1的结果。
问题是由下一个问题发展而来的。正如我在上面写的,有一个矩阵。该矩阵的逆值被计算出来。有时(也许是由于double的精度限制造成的错误),矩阵变成了退化的,无法计算出逆值。但如果你把精度降低一些,你仍然能够计算出反数。这就是为什么我想进行一些测试,并得到一些统计数字,以确定结果与真实的结果相似的程度。在大多数情况下,通过(字符串) 的双重转换可以解决这个问题。但有时这还不够,我希望能够控制切割的精度。而DoubleToString,即使精度为-16到16,在大多数情况下也不能解决问题。
你能告诉我吗,请告诉我。
在指标中,系列的顺序,例如close[],是由ArraySetAsSeries() 设置一次还是以其他方式设置?
是在OnCalculate()还是在OnInit()中完成?
我遇到了一个令人困惑的情况。
close[]中的订单,在第一个tick上被AS_SERIES设置,在下一个tick上自发地改变为正常的,即!AS_SERIES。
我在代码中没有发现任何这样做的理由。
你能告诉我吗,请告诉我。
在指标中,系列的顺序,例如close[],是由ArraySetAsSeries()设置一次还是以其他方式设置?
是在OnCalculate()还是在OnInit()中完成?
我遇到了一个令人困惑的情况。
close[]中的订单,在第一个tick上被AS_SERIES设置,在下一个tick上自发地改变为正常的,即!AS_SERIES。
我没有在代码中找到这个原因。
而且你不会在OnInit()中看到close[] 数组。而其他预定义的OnCalculate()参数 则没有。
因此,结论是--只在OnCalculate()中。
而在OnInit()中,你不会看到close[] 数组。而其他预定义的OnCalculate()参数都没有。
因此,结论是--只在OnCalculate()中。
我得出了同样的结论。)))
设置一次这个命令就够了,还是应该在每一次交易 中都这样做,还有待观察。