以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://www.weistock.com/bbs/index.asp)
--  公式模型编写问题提交  (http://www.weistock.com/bbs/list.asp?boardid=4)
----  关于FLOOR函数使用问题  (http://www.weistock.com/bbs/dispbbs.asp?boardid=4&id=174336)

--  作者:xxinstar100
--  发布时间:2020/2/16 22:33:26
--  关于FLOOR函数使用问题

CC:=4889.26;

T1: FLOOR(CC/0.2)*0.2;      //正确=4889.2
T2: T1/0.2;                        //正确=24446
T3: FLOOR( T2);                //错误=24445  (按道理应该等于24446)
T4: FLOOR(T1 /0.2)*0.2;    //错误=4889     (再经过一次FLOOR操作后少了一个做小交易单元)


看下上面的计算过程,第三步按道理应该对于24446,为什么错了?

--  作者:wenarm
--  发布时间:2020/2/16 23:03:32
--  

T3是因为float类型数据造成的。T2在float类型中,可能是2444.5.99999.这种情况你自己在C语言等中可以看到。

 


--  作者:xxinstar100
--  发布时间:2020/2/17 8:57:08
--  关于FLOOR函数使用问题


有什么办法能调准不偏差,4889.26,取最小交易单元后应当是4889.2才对

--  作者:wenarm
--  发布时间:2020/2/17 9:04:30
--  

没办法。数据类型造成的。


--  作者:yukizzc
--  发布时间:2020/2/17 9:05:40
--  
a:=4889.26;
b:floor(a*10)/10
--  作者:xxinstar100
--  发布时间:2020/2/17 12:35:13
--  FLOOR函数使用
乘以5效果更好,能保证最小交易单位为0.2

b:floor(a*5)/5

除以0.2 改成 乘以5 效果就不一样了,与预期的一致