计算字段问题,急!!!在线等待

xyzliuin 2003-09-19 04:50:18
数据窗口中使用计算字段求和(sum je for all),实际值为87.60
在程序调试中获得的值为87.59999999999998976
为什么呀,很着急!!
...全文
21 43 打赏 收藏 转发到动态 举报
写回复
用AI写文章
43 条回复
切换为时间正序
请发表友善的回复…
发表回复
jeff_107 2003-09-21
  • 打赏
  • 举报
回复
这种运算误差问题好多地方都会出现,最好还是绕过去
xyzliuin 2003-09-21
  • 打赏
  • 举报
回复
谢谢!

“而且,有条件判断时,也还有问题,最好是转换成字符型进行比较!”-----会有什么问题
已经round(xx,2)了


eminena 2003-09-21
  • 打赏
  • 举报
回复
只能用代码解决了!

而且,有条件判断时,也还有问题,最好是转换成字符型进行比较!
xyzliuin 2003-09-21
  • 打赏
  • 举报
回复
因为我们的软件中字段小数位为5位的有很多,经常会碰到这种问题,有时需要判断输入的数值是否和计算字段相等,这时就出问题了
eminena 2003-09-21
  • 打赏
  • 举报
回复
是这样.

想知道你注重此事的根本原因!
xyzliuin 2003-09-21
  • 打赏
  • 举报
回复
意思是没有好的解决办法?只能用truncate、round或在代码中控制?
eminena 2003-09-21
  • 打赏
  • 举报
回复

是浮点运算惹的祸!
xyzliuin 2003-09-21
  • 打赏
  • 举报
回复
没试过

我看看,还有没有更好的方法?能解释一下为什么会出现87.59999999999998976这种结果
我想从根本上解决它
eminena 2003-09-21
  • 打赏
  • 举报
回复


truncate(round( sum( je for all ), 2),2)

可行?
xyzliuin 2003-09-21
  • 打赏
  • 举报
回复
不行,我已经试过了,代码中调用还是87.59999999999998976
eminena 2003-09-21
  • 打赏
  • 举报
回复
一直不知道你的要,你这不就说明白了:

把将计算域表达式改写为:


round( sum( je for all ), 2)

OK!
xyzliuin 2003-09-21
  • 打赏
  • 举报
回复
现在我想要的是和代码无关
这是以前的代码,返回值87.59999999999998976
ldec_yfje = uo_edit.dw_cp.object.compute_3[uo_edit.dw_cp.getrow()
这是我现在用的代码,返回值正确
ldec_yfje = round(uo_edit.dw_cp.object.compute_3[uo_edit.dw_cp.getrow()],2)


但是我想在画数据窗口时就把这个问题给搞定,我想知道为什么会显示出那种格式

这个问题应该经常能碰到的,难道你们没有遇见过?
xyzliuin 2003-09-21
  • 打赏
  • 举报
回复
谢谢,就这样吧,结贴了
xyzliuin 2003-09-20
  • 打赏
  • 举报
回复
楼上你指的是改format ? 不起作用
yao_xh 2003-09-20
  • 打赏
  • 举报
回复
你把要sum的各字段的格式都设置为两位的,加起来就不应该是87.59999999999998976了
xyzliuin 2003-09-20
  • 打赏
  • 举报
回复
我想不管怎么定义数据类型,我是87.60为什么要给我变成87.59999999999998976
20hao 2003-09-20
  • 打赏
  • 举报
回复
是不是数据类型定义错误.
xyzliuin 2003-09-20
  • 打赏
  • 举报
回复
to:eminena(0.3V 力大)
1。软件要求小数位为5位,不能修改表结构
2。设置显示格式不起作用,只是显示正确,调用时还是不行
3。我在计算字段里写成truncate((sum je for all),2)和round((sum je for all),2)都不行,调用时还是不正确
TGWall 2003-09-20
  • 打赏
  • 举报
回复
在数据窗口对象中选中该计算字段,然后选属性中的format选项页,在format框中填入########0.00即可,祝你好运。
eminena 2003-09-20
  • 打赏
  • 举报
回复

1.你看一下表结构中, 列 je 的类型及格式.(关键问题可能在这里,可将 je 的格式设为两位小数)

2.在录入数据的数据窗口面板中,列 je 的编辑及显示格式(设为 0.00)

3.调用计算域的变量,在经过计算后,若小数超两位,用函数转换成符合要求的格式.
加载更多回复(23)

1,075

社区成员

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

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