在MT4中通过NormalizeDouble对数字进行四舍五入 - 页 13 1...67891011121314151617 新评论 Lilita Bogachkova 2016.02.25 22:44 #121 Алексей Тарабанов: 恶魔就在其中......当然,是2.6。 是时候睡觉了。 Алексей Тарабанов 2016.02.25 22:47 #122 lilita bogachkova: 是时候睡觉了。 加入 [删除] 2016.02.25 22:58 #123 Dmitry Fedoseev: 什么是5?对这样的数字进行归一化处理会使所有的9变成0,所以归一化后再抛弃会得到错误的结果。DoubleToString(0.99999,5) Dmitry Fedoseev 2016.02.26 00:05 #124 Vasyl Nosal: DoubleToString(0.99999,5)那么,如果数字是0.99999,而你必须留下两个数字呢?丢弃其余的。我们需要得到0.99。所以我们把它归一到三位数,得到1.000,丢弃一位,得到1.00,但没有得到0.99。 [删除] 2016.02.26 00:56 #125 Dmitry Fedoseev:那么,如果数字是0.99999,而你必须留下两个数字呢?丢弃其余的。我们需要得到0.99。所以我们把它归一到三位数,得到1.000,丢弃一位,得到1.00,但没有得到0.99。extern ushort Characters_delete = 3; /////////////////////////////////////////// string data=DoubleToString(0.99999,5); string resoult=StringSubstr(data,0,StringLen(data)-Characters_delete); Dmitry Fedoseev 2016.02.26 01:00 #126 Vasyl Nosal: 是的......突然间我们有了0.999999这个数字,而不是0.999999。 [删除] 2016.02.26 01:02 #127 Dmitry Fedoseev: 是的......突然间我们有了0.999999这个数字,而不是0.999999。string(0.999999) Dmitry Fedoseev 2016.02.26 01:03 #128 这让我想起了关于失踪的程序员的轶事。而他正坐在一个冷水浴中,手中拿着洗发水,上面写着 "肥皂、冲洗、重复"。 [删除] 2016.02.26 06:11 #129 Dmitry Fedoseev: 这让我想起了一个关于程序员失踪的笑话。他坐在一个冷水澡里,手里拿着洗发水,上面写着 "肥皂,冲洗,重复"。 为什么一种语言需要如此精确:数字(例如)"0.7 "实际上被存储为 "0.69999..."?这实际上是在什么地方使用的吗?我习惯于像在计算器中计算数字,它显示得很准确。是的,也许是计算器本身四舍五入了,而且本身并没有存储准确的数字...谁需要使用这种带有无限分数的近似数字而不是精确的数值?除以它,得到的是0.7,而且不必费心裁剪或四舍五入 :-) Lilita Bogachkova 2016.02.26 06:16 #130 Dmitry Fedoseev:那么,如果数字是0.99999,而你必须留下两个数字呢?丢弃其余的。我们需要得到0.99。所以我们把它归一到三位数,得到1.000,丢弃一位,得到1.00,但没有得到0.99。试着得到一个0.999999999999999 的结果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(一)。void OnStart() { double v1=1.0/3.0; double v2=3.0*v1; Print("v1 = (1/3) = ",DoubleToString(v1)," | ","v2 = 3*(1/3) = ",DoubleToString(v2)); }v1 = (1/3) = 0.33333333 | v2 = 3*(1/3) = 1.00000000或0.999999999999999=1.0void OnStart() { double v1=0.99999999999999999; if(v1>=1.0) Print("v1 (",DoubleToString(v1),") >= 1.0"); }v1 (1.00000000) >= 1.0 1...67891011121314151617 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
恶魔就在其中......当然,是2.6。
是时候睡觉了。
什么是5?对这样的数字进行归一化处理会使所有的9变成0,所以归一化后再抛弃会得到错误的结果。
DoubleToString(0.99999,5)
那么,如果数字是0.99999,而你必须留下两个数字呢?丢弃其余的。我们需要得到0.99。所以我们把它归一到三位数,得到1.000,丢弃一位,得到1.00,但没有得到0.99。
那么,如果数字是0.99999,而你必须留下两个数字呢?丢弃其余的。我们需要得到0.99。所以我们把它归一到三位数,得到1.000,丢弃一位,得到1.00,但没有得到0.99。
是的......突然间我们有了0.999999这个数字,而不是0.999999。
这让我想起了一个关于程序员失踪的笑话。他坐在一个冷水澡里,手里拿着洗发水,上面写着 "肥皂,冲洗,重复"。
那么,如果数字是0.99999,而你必须留下两个数字呢?丢弃其余的。我们需要得到0.99。所以我们把它归一到三位数,得到1.000,丢弃一位,得到1.00,但没有得到0.99。
试着得到一个0.999999999999999 的结果
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