在MT4中通过NormalizeDouble对数字进行四舍五入 - 页 14 1...7891011121314151617 新评论 Victor Nikolaev 2016.02.27 06:50 #131 曾几何时,为圆润的底部和顶部做了一些功能可能会对某人有所帮助//+------------------------------------------------------------------+ double RoundMax(double price,double symbol_point,int symbol_digits) { return(NormalizeDouble(price+MyK(price,symbol_point,symbol_digits)*symbol_point, symbol_digits-1)); } //+------------------------------------------------------------------+ double RoundMin(double price,double symbol_point,int symbol_digits) { return(NormalizeDouble(price-MyK(price,symbol_point,symbol_digits)*symbol_point, symbol_digits-1)); } //+------------------------------------------------------------------+ int MyK(double price,double symbol_point,int symbol_digits) { double tmp1=NormalizeDouble(price, symbol_digits); double tmp2=NormalizeDouble(price, symbol_digits-1); return((MathAbs(tmp1-tmp2)<symbol_point)?10:5); } //+------------------------------------------------------------------+ [删除] 2016.02.27 06:53 #132 Victor Nikolaev:曾几何时,为圆润的底部和顶部做了一些功能可能会对某人有所帮助 谢谢,我将为我的收藏品买下它。 Dmitry Fedoseev 2016.02.27 11:28 #133 lilita bogachkova: 试着得到一个0.99999999999999999 的结果X = 0.9999999999999999910*X = 10*0.9999999999999999910*x-x = 10*0.99999999999-0.99999999999-0.999999999999*X = 9*0.99999999999999999我们得到9*X=9或X等于1(一)。v1 = (1/3) = 0.33333333 | v2 = 3*(1/3) = 1.00000000或0.999999999999999=1.0v1 (1.00000000) >= 1.0 在这种情况下,0.99999999999999999999代表1.0。但任务是 "丢弃",所以结果必须包括9。 [删除] 2016.02.28 11:48 #134 感谢大家提供的有用的线索我选择了通过NormalizeDouble 四舍五入,然后修剪最后一位数字的方案。到目前为止,它完全适合。 חולםטרנסצנדר ᨖ 2016.09.27 13:18 #135 再次关于四舍五入......请告知有关情况(不要扔西红柿,我是一个人道主义者)。有这样一个变量。 double delta=NormalizeDouble(new_lot-sum_lots,Lots_Digits); if(delta>0) delta-=OrderLots(); if(delta<0) delta+=OrderLots();德尔塔最初是规范化的。OrderLots可能应该返回规范化的配音。但不知何故,有时在罕见的情况下,我得到了2.775557561562891e-17这样的数字。所以它几乎是零,但不是零.......第一个问题 - 这是否正常?第二个问题--根据我的理解,我只需做第二次归一化以避免尾巴?第三个问题(我觉得反正我也听不懂,但我还是要问)。 两个归一化的数字相加能否得到非归一化的数字?P.S. 我很抱歉再次提出这个问题,但我只是没有力量再重新阅读一遍 Rounding numbers in MT4 fxsaber 2016.09.27 13:46 #136 transcendreamer:再次关于四舍五入......请告知有关情况(不要扔西红柿,我是一个人道主义者)。有这样一个变量。 double delta=NormalizeDouble(new_lot-sum_lots,Lots_Digits); if(delta>0) delta-=OrderLots(); if(delta<0) delta+=OrderLots();德尔塔最初是规范化的。OrderLots可能应该返回规范化的配音。但不知何故,有时在罕见的情况下,我得到了2.775557561562891e-17这样的数字。所以它几乎是零,但不是零.......第一个问题 - 这是否正常?第二个问题--根据我的理解,我只需做第二次归一化以避免尾巴?第三个问题(我觉得反正我也听不懂,但我还是要问)。 两个归一化的数字相加能否得到非归一化的数字?P.S. 请原谅我再次提起,但我实在没有精力全部重读一遍是的。是的。是的。 חולםטרנסצנדר ᨖ 2016.09.27 14:08 #137 fxsaber:是的。是的。是的。 谢谢你 Andrey Dik 2016.09.27 14:18 #138 transcendreamer:P.S. 我为再次提出这个问题而道歉,但我实在没有精力再去看一遍。最好是自己用不同的例子来检查,这样会让你有一个了解。唯一的问题是,我做错了。if(delta>0)但像这样。if(delta>0.0) 对于双数。我不知道这是否真的重要,但在我的变体中,我从未遇到过错误(我只尝试比较相同类型的变量)。 fxsaber 2016.09.27 14:25 #139 Andrey Dik:我不知道这是否真的重要,但我的版本从未遇到过错误(我只尝试比较相同类型的变量)。 它没有。 pavlick_ 2016.09.27 14:38 #140 有些数字只能用无限小数来表示,如十进制中的1/3。但1/3在三级系统中不是一个无限的分数,在那里它==0.1。也就是说,不同的数字系统都有自己的无限小数。因此,十进制的非无限小数在二进制中可以是1。例如:0.1,0.2,0.3,0.4,...。没有确切的二进制表示。如果你调用NormalizeDouble 十次,它要么是0.199999999...1,要么是0.200000...1。 我不知道,也许这就是新闻。 1...7891011121314151617 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
曾几何时,为圆润的底部和顶部做了一些功能
可能会对某人有所帮助
曾几何时,为圆润的底部和顶部做了一些功能
可能会对某人有所帮助
试着得到一个0.99999999999999999 的结果
X = 0.99999999999999999
10*X = 10*0.99999999999999999
10*x-x = 10*0.99999999999-0.99999999999-0.99999999999
9*X = 9*0.99999999999999999
我们得到9*X=9或X等于1(一)。
v1 = (1/3) = 0.33333333 | v2 = 3*(1/3) = 1.00000000
或0.999999999999999=1.0
v1 (1.00000000) >= 1.0
感谢大家提供的有用的线索
我选择了通过NormalizeDouble 四舍五入,然后修剪最后一位数字的方案。到目前为止,它完全适合。
再次关于四舍五入......
请告知有关情况(不要扔西红柿,我是一个人道主义者)。
有这样一个变量。
double delta=NormalizeDouble(new_lot-sum_lots,Lots_Digits);
if(delta>0) delta-=OrderLots();
if(delta<0) delta+=OrderLots();
德尔塔最初是规范化的。
OrderLots可能应该返回规范化的配音。
但不知何故,有时在罕见的情况下,我得到了2.775557561562891e-17这样的数字。
所以它几乎是零,但不是零.......
第一个问题 - 这是否正常?
第二个问题--根据我的理解,我只需做第二次归一化以避免尾巴?
第三个问题(我觉得反正我也听不懂,但我还是要问)。
两个归一化的数字相加能否得到非归一化的数字?
P.S. 我很抱歉再次提出这个问题,但我只是没有力量再重新阅读一遍
再次关于四舍五入......
请告知有关情况(不要扔西红柿,我是一个人道主义者)。
有这样一个变量。
double delta=NormalizeDouble(new_lot-sum_lots,Lots_Digits);
if(delta>0) delta-=OrderLots();
if(delta<0) delta+=OrderLots();
德尔塔最初是规范化的。
OrderLots可能应该返回规范化的配音。
但不知何故,有时在罕见的情况下,我得到了2.775557561562891e-17这样的数字。
所以它几乎是零,但不是零.......
第一个问题 - 这是否正常?
第二个问题--根据我的理解,我只需做第二次归一化以避免尾巴?
第三个问题(我觉得反正我也听不懂,但我还是要问)。
两个归一化的数字相加能否得到非归一化的数字?
P.S. 请原谅我再次提起,但我实在没有精力全部重读一遍
P.S. 我为再次提出这个问题而道歉,但我实在没有精力再去看一遍。
最好是自己用不同的例子来检查,这样会让你有一个了解。
唯一的问题是,我做错了。
但像这样。
对于双数。我不知道这是否真的重要,但在我的变体中,我从未遇到过错误(我只尝试比较相同类型的变量)。
我不知道这是否真的重要,但我的版本从未遇到过错误(我只尝试比较相同类型的变量)。