以文本方式查看主题 - 金字塔客服中心 - 专业程序化交易软件提供商 (http://weistock.com/bbs/index.asp) -- 高级功能研发区 (http://weistock.com/bbs/list.asp?boardid=5) ---- 自定义函数返回值永远是0 (http://weistock.com/bbs/dispbbs.asp?boardid=5&id=50986) |
-- 作者:klc -- 发布时间:2013/4/12 16:16:48 -- 自定义函数返回值永远是0 在逐K线的公式中,调用一个自定义函数: A:=synxh(B); debugfile(\'c:\\test.txt\',\'%d\',A); A总是输出0
但在自定义函数中,用了 synxh=1 application.msgout synxh 则能输出1 |
-- 作者:admin -- 发布时间:2013/4/12 16:30:48 -- 你的程序就只有这4句话? |
-- 作者:klc -- 发布时间:2013/4/12 16:36:17 -- 有个 B:=1; if ISLASTBAR then begin A:=synxh(B); debugfile(\'c:\\test.txt\',\'%d\',A); end; 你好,很奇怪,结果text.txt文件中是有输出,但总是0,但 A:synxh(B); 则能从图表中看到,最后一个BAR的A是1 |
-- 作者:klc -- 发布时间:2013/4/12 16:48:05 -- 知道了,要用%f输出,返回值是浮点 |
-- 作者:klc -- 发布时间:2013/4/12 16:55:18 -- 然后接下来对返回值的判断还必须这样写: if A=1.0 then.... 而如果用 if A=1 then ...就永远不执行 1.0不等于1么?好奇怪 |
-- 作者:admin -- 发布时间:2013/4/12 18:24:49 -- 论坛关键字搜索 浮点误差 |
-- 作者:klc -- 发布时间:2013/4/14 10:21:25 -- admin你说的浮点误差问题是任何软件在进行计算后都可能存在的,现在我的问题是简单的赋值算不算计算? 比如: th:=THOLDING; if th=1 then begin ........ end
需要写成: th:=THOLDING; if round(th)=1 then begin ........ end 吗? |
-- 作者:klc -- 发布时间:2013/4/14 10:25:25 -- 更极端的情况是: AA:=1.0; BB:=AA; CC:=BB; DD:=CC; 是不是经过了反复计算? 是不是要写成: AA:=1.0; BB:=round(AA); CC:=round(BB); DD:=round(CC);
|