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
这样对于本数据倒是对了,不知对于其他数据,会不会有什么问题呢?

或者还有什么更好的方法呢?
...全文
111 点赞 收藏 5
写回复
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]

可能你没明白我的意思,就算这个打印出来了,也不是我要的值。
回复 点赞
发动态
发帖子
C语言
创建于2007-09-28

3.2w+

社区成员

24.0w+

社区内容

C语言相关问题讨论
社区公告
暂无公告