奇怪:3129781+48789248 居然不等于51919029,而是等于51919028

zclxyh 2007-12-28 11:09:06
今天遇见非常奇怪的事:如题,
我的代码如下
sql ="select 销售方式,sum(isnull(消费金额,0)+isnull(剩余金额,0)) as 金额 from 销售信息 where 销售方式 in ('现金','刷卡') group by 销售方式";
pQ->SQL->Add(sql);
pQ->Open();
char buffer[40] ;
float zje = 0,je =0;
for (int i =0 ;i<pQ->RecordCount;i++ )
{
AnsiString tt = pQ->FieldByName("销售方式")->AsString ;
je = pQ->FieldByName("金额")->AsFloat ;
sprintf( buffer, "%.2f", je ) ;
AnsiString sje = buffer ;
if (tt == "现金")
Lqk->Caption = "现金:"+sje;
else if (tt == "刷卡")
Ldj->Caption = "刷卡:"+sje;
zje = zje+je ;
pQ->Next();
}
sprintf( buffer, "%.2f", zje ) ;
AnsiString szje = buffer ;
Lzhj->Caption = "总合计:"+szje;

经过调试,现金为:48789248,刷卡为:3129781,但是显示的总金额却为:51919028,
这是怎么回事?

...全文
88 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
zclxyh 2007-12-28
  • 打赏
  • 举报
回复
ydlchina:
zje = zje+je ;将zje和je使用StrToFloat转化后在相加

========================================================
什么意思?他们本来就是Float 型吗
ydlchina 2007-12-28
  • 打赏
  • 举报
回复
zje = zje+je ;将zje和je使用StrToFloat转化后在相加
stherix 2007-12-28
  • 打赏
  • 举报
回复
金额 用Currency类型储存处理最好 其他格式都有精度的问题
zclxyh 2007-12-28
  • 打赏
  • 举报
回复
? AnsiString sje = buffer ;
========================================================
这样做不行吗?我一直这样做,没有出过问题
zclxyh 2007-12-28
  • 打赏
  • 举报
回复
有谁能解决这个问题?
ydlchina 2007-12-28
  • 打赏
  • 举报
回复
? AnsiString sje = buffer ;
jinjazz 2007-12-28
  • 打赏
  • 举报
回复
类似48789247.6+3129780.6

13,824

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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