字符转为双精度值后计算结果问题

geniushuai 2006-07-30 12:26:57
代码如下:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
double dres,sres,dtest1,dtest2;
AnsiString stest;
dtest1=262.2;
dtest2=265.2;
stest="265.2";
sres=(stest.Trim().ToDouble()-dtest1)*780;
dres=(dtest2-dtest1)*780;
}
结果sres=2340.000000000001
而dres=2340
按我们的计算也应该是2340,字符转换后怎么这样呢?
请帮忙!
...全文
123 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
geniushuai 2006-07-30
  • 打赏
  • 举报
回复
谢谢
geochway 2006-07-30
  • 打赏
  • 举报
回复
抱歉,刚才看错了.
这个问题我原来也发现过,你把表达式中的函数用一个中间变量代替就可以了:
double tmp;
tmp=stest.Trim().ToDouble();
sres=(tmp-dtest1)*780;

这样结果是正确的,原来我也发现过这个问题,
个人感觉应该是编译器在引进中间变量时,它会选用long double的变量,
到计算时转一次就出现舍入误差了.
geochway 2006-07-30
  • 打赏
  • 举报
回复
在我这儿没发现问题, 打上BCB6.0的Update4补丁试试

13,825

社区成员

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

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