救命贴:太奇怪了 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

jukywen 2001-10-28 08:52:23
double tmpstockqu,tmpcz
.
.
.
.
select sum() into :tmpstockqu


tmpcz = dw_1.getitemnumber()

if tmpcz = tmpstockqu then
else

statement1

end if

但现在当 tmpcz 等于 tmpstockqu 时 也执行 statement1 语句
我跟踪时候发现, tmpcz 是等于 tmpstockqu, 但却执行了 statement1.


救命。
...全文
176 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
ColdWolf 2001-10-30
  • 打赏
  • 举报
回复
学到一点东西
我是来相大家学习的啊
tiger201 2001-10-30
  • 打赏
  • 举报
回复
好象if round(x,3) = round(y,3) then 也不行。

你试试:
dec a,b
a=round(x,3)
b=round(y,3)
if a =b then
honye2000 2001-10-30
  • 打赏
  • 举报
回复
兩個變量定義時用decimal類型應該沒問題

另外應考慮null
jukywen 2001-10-30
  • 打赏
  • 举报
回复
up 1
NetColorWolf 2001-10-29
  • 打赏
  • 举报
回复
你判断“tmpcz 等于 tmpstockqu”的依据是什么?
jukywen 2001-10-29
  • 打赏
  • 举报
回复
也就是说我对于 double 的比较都必须 用 if a-b < .001 吗?

用 if round(x,3) = round(y,3) then 行吗?

jukywen 2001-10-29
  • 打赏
  • 举报
回复
现在的问题是: 我在SQL Server 表中看到的数是小数三位的,对应与该表的数据窗口的显示也是三位的, 用getitemnumber 取到的数值也是三位的, 另一个变量我用 round()也取了三位,这些我在跟踪时都很确定, 但PB仍旧认为是不等的,


这就太怪了吧?

eastseaofdragon 2001-10-29
  • 打赏
  • 举报
回复
up
tiger201 2001-10-29
  • 打赏
  • 举报
回复
DOUBLE类型的尾数有随机性,其本上没有两个DOUBLE会相等的。
用相减或指定只取到小数点后几位来比较。

linda_gao 2001-10-29
  • 打赏
  • 举报
回复
because tmpcz and tmpstockqu is DOUBLE , so you can not compare them use "=" . you'd better use tmpcz - tmpstockqu < 0.000001 ,
for example
aa = 1.21 , bb = 0.9 , cc = aa + bb , dd = 2.11

if you use if cc = dd then statement1 else statement2, you will find , statement2 will be recalled.
iamxia 2001-10-28
  • 打赏
  • 举报
回复
这样试试
if (tmpcz = tmpstockqu) then
另外,你有没有考虑到空值(NULL)的情况?
NetColorWolf 2001-10-28
  • 打赏
  • 举报
回复
不用跟踪,而用messagebox()试一下呢
jukywen 2001-10-28
  • 打赏
  • 举报
回复
没有人吗?

1,075

社区成员

发帖
与我相关
我的任务
社区描述
PowerBuilder 相关问题讨论
社区管理员
  • 基础类社区
  • WorldMobile
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧