欢迎使用金字塔普通技术服务论坛,您可以在相关区域发表技术支持贴。
我司技术服务人员将优先处理 VIP客服论坛 服务贴,普通区问题处理速度慢,请耐心等待。谢谢您对我们的支持与理解。


金字塔客服中心 - 专业程序化交易软件提供商金字塔软件高级功能研发区 → 自定义函数返回值永远是0

   

欢迎使用金字塔普通技术服务论坛,您可以在相关区域发表技术支持贴。
我司技术服务人员将优先处理 VIP客服论坛 服务贴,普通区问题处理速度慢,请耐心等待。谢谢您对我们的支持与理解。    


  共有3236人关注过本帖树形打印复制链接

主题:自定义函数返回值永远是0

帅哥哟,离线,有人找我吗?
klc
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:黑侠 帖子:993 积分:1787 威望:0 精华:5 注册:2012/11/28 17:37:20
自定义函数返回值永远是0  发帖心情 Post By:2013/4/12 16:16:48 [只看该作者]

在逐K线的公式中,调用一个自定义函数:

A:=synxh(B);

debugfile('c:\test.txt','%d',A);

A总是输出0

 

但在自定义函数中,用了

synxh=1

application.msgout synxh

则能输出1


 回到顶部
帅哥哟,离线,有人找我吗?
admin
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:7302 积分:32559 威望:1000 精华:45 注册:2003/12/30 16:34:32
  发帖心情 Post By:2013/4/12 16:30:48 [只看该作者]

你的程序就只有这4句话?

 回到顶部
帅哥哟,离线,有人找我吗?
klc
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:黑侠 帖子:993 积分:1787 威望:0 精华:5 注册:2012/11/28 17:37:20
  发帖心情 Post By: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
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:黑侠 帖子:993 积分:1787 威望:0 精华:5 注册:2012/11/28 17:37:20
  发帖心情 Post By:2013/4/12 16:48:05 [只看该作者]

知道了,要用%f输出,返回值是浮点

 回到顶部
帅哥哟,离线,有人找我吗?
klc
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:黑侠 帖子:993 积分:1787 威望:0 精华:5 注册:2012/11/28 17:37:20
  发帖心情 Post By:2013/4/12 16:55:18 [只看该作者]

然后接下来对返回值的判断还必须这样写:

if A=1.0 then....

而如果用

if A=1 then ...就永远不执行

1.0不等于1么?好奇怪


 回到顶部
帅哥哟,离线,有人找我吗?
admin
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:7302 积分:32559 威望:1000 精华:45 注册:2003/12/30 16:34:32
  发帖心情 Post By:2013/4/12 18:24:49 [只看该作者]

论坛关键字搜索 浮点误差

 回到顶部
帅哥哟,离线,有人找我吗?
klc
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:黑侠 帖子:993 积分:1787 威望:0 精华:5 注册:2012/11/28 17:37:20
  发帖心情 Post By: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
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:黑侠 帖子:993 积分:1787 威望:0 精华:5 注册:2012/11/28 17:37:20
  发帖心情 Post By: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);

 

 


 回到顶部