关于integer和double混合运算的问题

搞定Delphi 2011-12-01 02:24:14
新手学delphi,遇到问题了,大大们帮帮忙吧~!!
var
a,b,c:integer;
d:Double;

Begin
a:=b-c*d;
End;

编译时出错,请教高手们如何解决呢,如果用Round去四舍五入的话会降低精度,有没有更好的方法啊,谢谢大家了,不知道半夜了坛子里还有人吗,如果可以解决此问题的高手白天看到,麻烦也帮帮忙吧,谢谢啦~~!!
...全文
506 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
babydog01 2011-12-01
  • 打赏
  • 举报
回复
Begin
a:=b-c*d;
End;
你的这个b-c*d肯定会产生小数,而你的a则是一个整型的数,所以前后会矛盾的。
解决方法:
1、把a 变成有小数的变量。
2、把C*D取整处理变成整数也可以。

funxu 2011-12-01
  • 打赏
  • 举报
回复
double和float 本身的存储方式决定了他不会精确的,经常出现.9999之类的问题,所以才要用四舍五入或者其他运算方法来弥补这个问题,这点在使用前就应该有所觉悟滴,不要妄想有一种完美的精度解决方案,只有最适合你的精度解决方案,另外不要被C#里的decimal忽悠了,那玩意为了精确,占用了16个字节
lhy 2011-12-01
  • 打赏
  • 举报
回复
把b和c转换成double
a如果要求精度就直接定义成double
hongss 2011-12-01
  • 打赏
  • 举报
回复
去看看integer,single,double等等类型的范围。。。
csn168 2011-12-01
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 bdmh 的回复:]
都用double
[/Quote]
对,将原来定义为Integer类型的改为Double类型就解决了,不存在四舍五入的问题
bdmh 2011-12-01
  • 打赏
  • 举报
回复
都用double
kaikai_kk 2011-12-01
  • 打赏
  • 举报
回复
为什么不全部定义为integer或者double类型?
搞定Delphi 2011-12-01
  • 打赏
  • 举报
回复
OK了 ,感谢各位,结贴啦

16,748

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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