在MT4中通过NormalizeDouble对数字进行四舍五入 - 页 3 12345678910...17 新评论 Vladimir Karputov 2016.01.21 14:42 #21 数学。六年级。教科书。Nikolsky S.M., Potapov M.K. Moscow: 2012.- 256 с四舍五入。 [删除] 2016.01.25 14:30 #22 这已经变成了一个多么激烈的话题。MT4似乎在四舍五入方面工作正常。 我的意思是NormalizeDouble(0.055,2) 不是把数字"0.055 "四舍五入 到 "0.06",而是把它修剪到 "0.05"。我很难理解这些MKL功能。我不太明白为什么 "1.0015223567 "要用NormalizeDouble进行四舍五入,如果你只想把BORROWN数字带到正确的位置。 也就是说,将NormalizeDouble(1.001526789, 5)的结果是 "1.00152"。它不需要被四舍五入 到"1.00153"。一定有RoundDouble函数来解决这个问题=)这有可能吗?还是有必要一直四舍五入,得到错误的数字? Vladimir Karputov 2016.01.25 14:54 #23 你最好已经下定决心。这是四舍五入。 关于交易、自动交易系统和交易策略测试的论坛 在MT4中通过NormalizeDouble对数字进行四舍五入 Roman Starinskij, 2016.01.21 10:03 你好。你能告诉我这是什么问题吗?为什么函数NormalizeDouble(0.055,2) 将数字"0.055 "取整 为 "0.06"?这不是一个分数四舍五入的功能。它没有。 关于交易、自动交易系统和测试交易策略的论坛 在MT4中通过NormalizeDouble对数字进行四舍五入 Roman Starinskij, 2016.01.25 14:30 这已经变成了一个多么激烈的话题。MT4似乎在四舍五入方面工作正常。 我的意思是NormalizeDouble(0.055,2) 不是把数字"0.055 "四舍五入 到 "0.06",而是把它修剪到 "0.05"。我很难理解这些MKL功能。我不太明白为什么 "1.0015223567 "要用NormalizeDouble函数进行四舍五入,如果你只想把BORROWN的数字带到正确的位置。 也就是说,将NormalizeDouble(1.001526789, 5)的结果是 "1.00152"。它不需要被四舍五入 到"1.00153"。一定有RoundDouble函数来解决这个问题=)这有可能吗?还是有必要一直圆下去,得到你不想要的数字?而且是为了实验的需要。//+------------------------------------------------------------------+ //| NormalizeDouble.mq5 | //| Copyright 2016, MetaQuotes Software Corp. | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2015, MetaQuotes Software Corp." #property link "https://www.mql5.com" #property version "1.00" #property strict #property script_show_inputs #property description "Проверка NormalizeDouble" input double value=0.055; // нормализуемое число input int digits=2; // кол-во знаков после запятой //+------------------------------------------------------------------+ //| Script program start function | //+------------------------------------------------------------------+ void OnStart() { Print("Число ",value," округлённое с точностью до ",digits," знаков = ",NormalizeDouble(value,digits)); } //+------------------------------------------------------------------+ 附加的文件: Test.mq5 2 kb Rounding numbers in MT4 雪崩 测试日志 - 算法交易, 交易机器人 Dmitry Fedoseev 2016.01.25 15:44 #24 Roman Starinskij:这已经变成了一个多么激烈的话题。MT4似乎在四舍五入方面工作正常。 我的意思是NormalizeDouble(0.055,2) 不是把数字"0.055 "四舍五入 到 "0.06",而是把它修剪到 "0.05"。我很难理解这些MKL功能。我不太明白为什么 "1.0015223567 "要用NormalizeDouble函数进行四舍五入,如果你只想把BORROWN的数字带到正确的位置。 也就是说,将NormalizeDouble(1.001526789, 5)的结果是 "1.00152"。它不需要被四舍五入 到"1.00153"。一定有RoundDouble函数来解决这个问题=)这有可能吗?还是你需要一直圆下去,得到你不想要的数字?如果你需要修剪,那就修剪;如果你需要圆形,那就圆形。NormalkizeDouble()函数是圆的,这是你最经常需要的东西。为什么你认为应该使用RoundDouble()而不是NormalizeDouble()?这个世界是你创造的吗?一个球在滚动,一个正方形有四个角,这样可以吗? Slava 2016.01.25 16:00 #25 Roman Starinskij:这已经变成了一个多么激烈的话题。 这都是因为话题发起人没有阅读语言文档,也没有听从他的指示。 [删除] 2016.02.22 05:57 #26 Slawa: 这是因为作者没有阅读语言文件,也没有听从别人的建议。下面的分数除法和四舍五入的行为有点不清楚。有2个方程式。 0.06-0.02 = 0.03999999999999999 0.06-0.024 = 0.036使用推荐的NormalizeDouble函数,我们得到这些结果。 0.03999999999999999 = 0.04 0.036 = 0.04在第一个例子中,我们确实需要得到0.04 的数值,但在第二个例子中,我们需要0.03(这就是普通计算器的工作原理)。 应该使用NormalizeDouble,因为返回的分数是不完整的,但在第二种情况下,该函数返回的值是不正确的,对于第一个例子,你也不能不使用它。 Andrey Dik 2016.02.22 06:14 #27 Roman Starinskij:下面的分数除法和四舍五入的行为有点不清楚。有两个方程式。 0.06-0.02 = 0.03999999999999999 0.06-0.024 = 0.036使用推荐的NormalizeDouble函数,我们得到这些结果。 0.03999999999999999 = 0.04 0.036 = 0.04在第一个例子中,我们确实需要得到0.04 的数值,但在第二个例子中,我们需要0.03(这就是普通计算器的工作原理)。 应该使用NormalizeDouble,因为返回的分数是不完整的,但在第二种情况下,该函数返回的值是不正确的,对于第一个例子,你也不能不使用它。你的普通计算器不能正确计算,它应该是这样的。 Lilita Bogachkova 2016.02.22 08:17 #28 Slawa: 所有这些都是由于专题负责人没有阅读语言文件,没有听从他的指示。如果N+1位数<5,则保留第N位数,N+1和所有后续位数被清零。如果N+1位数≥5,则第N位数增加1,N+1 ,所有后续位数被清零。对不起,但我仍然不明白为什么四舍五入'2'不能立即允许=0.06000000void OnStart() { double v1 = NormalizeDouble(0.055,3); double v2 = NormalizeDouble(0.0549,3); v1=NormalizeDouble(v1,2); v2=NormalizeDouble(v2,2); Print("v1 = ",DoubleToString(v1),", v2 = ",DoubleToString(v2)); } v1 = 0.06000000, v2 = 0.06000000void OnStart() { double v1 = NormalizeDouble(0.055,2); double v2 = NormalizeDouble(0.0549,2); Print("v1 = ",DoubleToString(v1),", v2 = ",DoubleToString(v2)); } v1 = 0.06000000, v2 = 0.05000000void OnStart() { for(int i=7;i>=1;i--) { double v1 = 1.1234567; double v2 = NormalizeDouble(v1,i+1); v1=NormalizeDouble(v1,i); v2=NormalizeDouble(v2,i); Print("v1 = ",i," = ",DoubleToString(v1,7),", v2 = ",i," = ",DoubleToString(v2,7)); } Print("---"); }---v1 = 1 = 1.1000000, v2 = 1 = 1.1000000v1 = 2 = 1.1200000, v2 = 2 = 1.1200000v1 = 3 = 1.1230000, v2 = 3 = 1.1240000v1 = 4 = 1.1235000, v2 = 4 = 1.1235000v1 = 5 = 1.1234600, v2 = 5 = 1.1234600v1 = 6 = 1.1234570, v2 = 6 = 1.1234570v1 = 7 = 1.1234567, v2 = 7 = 1.1234567 Rounding numbers in MT4 Numerical series density Gallery of UIs written Dmitry Fedoseev 2016.02.22 09:17 #29 lilita bogachkova:我很抱歉,但我还是不明白为什么用'2'四舍五入不能得到=0.06000000 因为它是0.6,所以0.5只能通过作弊获得。 Ihor Herasko 2016.02.22 09:24 #30 lilita bogachkova:我很抱歉,但我还是不明白为什么四舍五入'2'使它不可能得到=0.06000000当只有一个数字被规范化时,很简单:0、1、2、3、4 -> 0,5、6、7、8、9 -> 1。当两位数被规范化时,两位数被考虑在内:0 - 49 -> 0,50 - 99 -> 1。毕竟,如果数字1.49必须被四舍五入为整数,我们真的要得到2,也就是51个百分点与1的可用49个百分点的距离吗?三位数、四位数等也一样。 12345678910...17 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
数学。六年级。教科书。Nikolsky S.M., Potapov M.K. Moscow: 2012.- 256 с
四舍五入。
这已经变成了一个多么激烈的话题。MT4似乎在四舍五入方面工作正常。
我的意思是NormalizeDouble(0.055,2) 不是把数字"0.055 "四舍五入 到 "0.06",而是把它修剪到 "0.05"。
我很难理解这些MKL功能。我不太明白为什么 "1.0015223567 "要用NormalizeDouble进行四舍五入,如果你只想把BORROWN数字带到正确的位置。
也就是说,将NormalizeDouble(1.001526789, 5)的结果是 "1.00152"。它不需要被四舍五入 到"1.00153"。一定有RoundDouble函数来解决这个问题=)
这有可能吗?还是有必要一直四舍五入,得到错误的数字?
你最好已经下定决心。这是四舍五入。
关于交易、自动交易系统和交易策略测试的论坛
在MT4中通过NormalizeDouble对数字进行四舍五入
Roman Starinskij, 2016.01.21 10:03
你好。你能告诉我这是什么问题吗?
为什么函数NormalizeDouble(0.055,2) 将数字"0.055 "取整 为 "0.06"?
这不是一个分数四舍五入的功能。
它没有。
关于交易、自动交易系统和测试交易策略的论坛
在MT4中通过NormalizeDouble对数字进行四舍五入
Roman Starinskij, 2016.01.25 14:30
这已经变成了一个多么激烈的话题。MT4似乎在四舍五入方面工作正常。
我的意思是NormalizeDouble(0.055,2) 不是把数字"0.055 "四舍五入 到 "0.06",而是把它修剪到 "0.05"。
我很难理解这些MKL功能。我不太明白为什么 "1.0015223567 "要用NormalizeDouble函数进行四舍五入,如果你只想把BORROWN的数字带到正确的位置。
也就是说,将NormalizeDouble(1.001526789, 5)的结果是 "1.00152"。它不需要被四舍五入 到"1.00153"。一定有RoundDouble函数来解决这个问题=)
这有可能吗?还是有必要一直圆下去,得到你不想要的数字?
而且是为了实验的需要。
这已经变成了一个多么激烈的话题。MT4似乎在四舍五入方面工作正常。
我的意思是NormalizeDouble(0.055,2) 不是把数字"0.055 "四舍五入 到 "0.06",而是把它修剪到 "0.05"。
我很难理解这些MKL功能。我不太明白为什么 "1.0015223567 "要用NormalizeDouble函数进行四舍五入,如果你只想把BORROWN的数字带到正确的位置。
也就是说,将NormalizeDouble(1.001526789, 5)的结果是 "1.00152"。它不需要被四舍五入 到"1.00153"。一定有RoundDouble函数来解决这个问题=)
这有可能吗?还是你需要一直圆下去,得到你不想要的数字?
如果你需要修剪,那就修剪;如果你需要圆形,那就圆形。NormalkizeDouble()函数是圆的,这是你最经常需要的东西。
为什么你认为应该使用RoundDouble()而不是NormalizeDouble()?这个世界是你创造的吗?一个球在滚动,一个正方形有四个角,这样可以吗?
这已经变成了一个多么激烈的话题。
这是因为作者没有阅读语言文件,也没有听从别人的建议。
下面的分数除法和四舍五入的行为有点不清楚。
有2个方程式。
0.06-0.02 = 0.03999999999999999
0.06-0.024 = 0.036
使用推荐的NormalizeDouble函数,我们得到这些结果。
0.03999999999999999 = 0.04
0.036 = 0.04
在第一个例子中,我们确实需要得到0.04 的数值,但在第二个例子中,我们需要0.03(这就是普通计算器的工作原理)。
应该使用NormalizeDouble,因为返回的分数是不完整的,但在第二种情况下,该函数返回的值是不正确的,对于第一个例子,你也不能不使用它。
下面的分数除法和四舍五入的行为有点不清楚。
有两个方程式。
0.06-0.02 = 0.03999999999999999
0.06-0.024 = 0.036
使用推荐的NormalizeDouble函数,我们得到这些结果。
0.03999999999999999 = 0.04
0.036 = 0.04
在第一个例子中,我们确实需要得到0.04 的数值,但在第二个例子中,我们需要0.03(这就是普通计算器的工作原理)。
应该使用NormalizeDouble,因为返回的分数是不完整的,但在第二种情况下,该函数返回的值是不正确的,对于第一个例子,你也不能不使用它。
你的普通计算器不能正确计算,它应该是这样的。
所有这些都是由于专题负责人没有阅读语言文件,没有听从他的指示。
如果N+1位数<5,则保留第N位数,N+1和所有后续位数被清零。
如果N+1位数≥5,则第N位数增加1,N+1 ,所有后续位数被清零。
对不起,但我仍然不明白为什么四舍五入'2'不能立即允许=0.06000000
v1 = 0.06000000, v2 = 0.06000000
v1 = 0.06000000, v2 = 0.05000000
---
我很抱歉,但我还是不明白为什么用'2'四舍五入不能得到=0.06000000
我很抱歉,但我还是不明白为什么四舍五入'2'使它不可能得到=0.06000000
当只有一个数字被规范化时,很简单:0、1、2、3、4 -> 0,5、6、7、8、9 -> 1。
当两位数被规范化时,两位数被考虑在内:0 - 49 -> 0,50 - 99 -> 1。毕竟,如果数字1.49必须被四舍五入为整数,我们真的要得到2,也就是51个百分点与1的可用49个百分点的距离吗?
三位数、四位数等也一样。