以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://weistock.com/bbs/index.asp)
--  高级功能研发区  (http://weistock.com/bbs/list.asp?boardid=5)
----  VBA 日期计算Bug,怎么解决?  (http://weistock.com/bbs/dispbbs.asp?boardid=5&id=141010)

--  作者:c100010222
--  发布时间:2016/10/16 0:27:26
--  VBA 日期计算Bug,怎么解决?

VBA自定义函数

Function CS03(Formula,dd,tt)
  
    CS03=0
    dim day
    day=dd+19000000

    CS03=day
End Function

 

 

PEL命令

dd0:=DATE();
tt:time(),NOAXIS;

aa:=CS03(dd0,tt);


msgout(1,NUMTOSTR(aa,0));

 

消息显示(只计算20根K线,日k线)

2016/10/16 00:24:15  20160908
2016/10/16 00:24:15  20160912
2016/10/16 00:24:15  20160912
2016/10/16 00:24:15  20160914
2016/10/16 00:24:15  20160920
2016/10/16 00:24:15  20160920
2016/10/16 00:24:15  20160920
2016/10/16 00:24:15  20160922
2016/10/16 00:24:15  20160924
2016/10/16 00:24:15  20160926
2016/10/16 00:24:15  20160928
2016/10/16 00:24:15  20160928
2016/10/16 00:24:15  20160928
2016/10/16 00:24:15  20160930
2016/10/16 00:24:15  20161010
2016/10/16 00:24:15  20161012
2016/10/16 00:24:15  20161012
2016/10/16 00:24:15  20161012
2016/10/16 00:24:15  20161014
2016/10/16 00:24:15  20161016

 

问题:没有单数的日期,只有偶数日期,为什么?

 

不加19000000时,消息显示是正确的。

 


--  作者:马良
--  发布时间:2016/10/16 6:52:14
--  
不明白你的逻辑,为何要加1900000?
--  作者:c100010222
--  发布时间:2016/10/16 9:41:01
--  

你以为我想加啊,这是你们程序的bug,取日期函数dd0:=DATE();比如日期2016-10-16返回值是1161016,

但是VBA里有些函数又要用到“2016-10-16”,所以加19000000。

 

 


--  作者:c100010222
--  发布时间:2016/10/16 9:54:37
--  

不管怎么样,我发现VBA的变量,数据大的计算就会出错,例如,1161017+19000000 显示结果20161016,什么原因?


--  作者:王锋
--  发布时间:2016/10/17 21:20:51
--  
msgbox 1161017+19000000  
这样简单测试重现不了你说的问题,可能的原因是浮点数的精度造成的,你试试这样改进
 
dim day
 day=CLng(dd)+19000000
[此贴子已经被作者于2016-10-17 21:21:29编辑过]