在MT4中通过NormalizeDouble对数字进行四舍五入 - 页 15

 
pavlick_:
有些数字只能用无限小数来表示,如十进制系统中的1/3。但1/3在三级系统中不是一个无限的分数,在那里它==0.1。也就是说,不同的数字系统都有自己的无限小数。因此,十进制的非无限小数在二进制中可以是1。例如:0.1,0.2,0.3,0.4,...。没有确切的二进制表示。如果你调用NormalizeDouble 十次,它要么是0.199999999...1,要么是0.200000...1。 我不知道,也许这就是新闻。

你说的是真话!说白了,ND只是用来比较的,而不是用来代表的。而且它早已过时了。

 
pavlick_:
有些数字只能表示为无限大的分数,例如十进制中的1/3。但1/3在三级系统中不是一个无限的分数,在那里它==0.1。也就是说,不同的数字系统都有自己的无限小数。因此,十进制的非无限小数在二进制中可以是1。例如:0.1,0.2,0.3,0.4,...。没有确切的二进制表示。如果你调用NormalizeDouble 十次,它要么是0.199999999...1,要么是0.200000...1。 我不知道,也许这就是新闻。

我记得,但在这种情况下,它是0+0,不是0。

 
transcendreamer:

我记得,但在这种情况下,它是0+0,它不是0。

在什么情况下?给我一个例子,说明什么时候是这种情况。
 
fxsaber:

你说的是真话!说白了,ND只是用来比较的,而不是用来代表的。而且早已被淘汰了。

NormalizeDouble 只需要在下挂单和止损时对价格进行归一化处理。它不需要它做其他事情。

这一点在文件中已明确说明

计算出的StopLoss和TakeProfit值,以及挂单的开盘价,必须以准确度为标准,其值可以通过Digits() 获得。

 
Sergei Vladimirov:
在什么特定情况下?给我一个例子,说明什么时候会发生这种情况。

当变量中原有的0被加入时,就会发生这种情况。

(我怀疑它实际上不是0)

 
Slawa:

NormalizeDouble 只需要在下挂单和止损时对价格进行归一化处理。它不需要它做其他事情。

这一点在文件中已明确说明

但是,比较真实的数字呢...
 
transcendreamer:

当变量中原有的0被加入时,就会发生这种情况。

(我怀疑它实际上不是0)


正是如此。加法和减法中的 "实数 "零仍然是零。这就是为什么我向你提供了一个例子。

 
Alexander Bereznyak:
那么,比较真实的数字...

一个相关的副作用。

事实证明这很方便。但它最初并不打算以这种方式使用。

有一些特殊的功能用于打印具有正确精度的实数。

告诉我,为什么在计算中需要对实数进行四舍五入?因为在这种情况下,计算的准确性就会丧失!

 
Sergei Vladimirov:

正是如此。加法和减法中的 "真正 "的零仍然是零。这就是为什么我向你提供了一个例子。

我开始猜测NormalizeDouble(new_lot-sum_lots,Lots_Digits);不会准确输出0,而是存储一些尾数
 
Slawa:

NormalizeDouble 只需要在下挂单和止损时对价格进行归一化处理。它不需要它做其他事情。

这一点在文件中已明确说明

废弃的

关于交易、自动交易系统和策略测试的论坛

标准功能/方法的其他实现方式

Renat Fatkhullin, 2016.09.02 00:55

这不是超载的方法。相同的函数签名。

但这个想法是明确的--考虑到打勾造粒 的正常化的功能。