C中的int * double 问题

panchao521 2010-08-20 09:07:45

//sNewValue = "482000" int数组
//iMonths = 87; int
//dRate = 0.009f; double
dNewValue = atof(sNewValue);
dPrice = dNewValue * (1.0 - iMonths * dRate);
printf("dPrice = %f * (1 - %d * %f) = %f\n",dNewValue,iMonths,dRate,dPrice );

计算完打印出来,竟然有问题。
dPrice = 482000.000000 * (1 - 87 * 0.009000)= 104594.016....
结果本应整数,但多了0.016.....
这样我再保留两位小数时就有问题了。这是为什么呢?

我的解决方法
dNewValue = atof(sNewValue);
fTemp1 = iMonths * dRate;
EXEC SQL select round(:fTemp1,3) into :fTemp1 from dual;
dPrice = dNewValue * (1.0 - fTemp1);
printf("dPrice = %f * (1 - %d * %f) = %f\n",dNewValue,iMonths,dRate,dPrice );
计算完打印出来,没有问题。
dPrice = 482000.000000 * (1 - 87 * 0.009000)= 104594.000000
这样对于本数据倒是对了,不知对于其他数据,会不会有什么问题呢?

或者还有什么更好的方法呢?
...全文
240 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2010-08-20
  • 打赏
  • 举报
回复
printf("dPrice = %f * (1 - %d * %f) = %f\n",dNewValue,iMonths,dRate,dPrice );
改为
printf("dPrice = %lg * (1 - %d * %lg) = %lg\n",dNewValue,iMonths,dRate,dPrice );
china_west 2010-08-20
  • 打赏
  • 举报
回复
没有问题啊
taodm 2010-08-20
  • 打赏
  • 举报
回复
楼主没听说过浮点数准确度问题?
panchao521 2010-08-20
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 china_west 的回复:]

没有问题啊
[/Quote]
请问你是说我的问题是重现不了的,
还是说我的解决方案是没有问题的啊
panchao521 2010-08-20
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 zhao4zhong1 的回复:]

printf("dPrice = %f * (1 - %d * %f) = %f\n",dNewValue,iMonths,dRate,dPrice );
改为
printf("dPrice = %lg * (1 - %d * %lg) = %lg\n",dNewValue,iMonths,dRate,dPrice );
[/Quote]

可能你没明白我的意思,就算这个打印出来了,也不是我要的值。

70,023

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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