返回信息流用4个整型数a,b,c,d去表示一个有效数字为四位的两位小数num(如25.84)的每一位,下面是我的算法:
unsigned int a,b,c,d;
a=num/10;
b=num-a*10;
c=num*10-a*100-b*10;
d=num*100-a*1000-b*100-c*10;
经验证,35.17用abcd表示后会变成3518
当前面整数部分大于32或后面小数部分>16时就会出错
改成double都好像就没事了
请问这是不是与float类型数在内存中的储存方式有关?
是不是整数部分和小数部分分开放?
如果是的话,32是5位,16是4位,和起来时9位,9这个数字出现在这里我觉得有点奇怪诶……
请帮忙解答
谢谢各位了~
这是一条镜像帖。来源:北邮人论坛 / cpp / #28686同步于 2009/9/18
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
求助各位大牛,一个C算法的问题
fish748
2009/9/18镜像同步4 回复
订阅后,新回复会通过你的通知中心匿名送达。
4 条回复
【 在 lanphon 的大作中提到: 】
: 精度问题
: 你打印num看一下,当时35.17的时候,打印出来是15.16998,所以就出现这样的结果了
此外,你关于float存储的理解是错误的,建议找基础的书看看
是这样,貌似改成double就可以,谢谢了
【 在 lanphon 的大作中提到: 】
: 精度问题
: 你打印num看一下,当时35.17的时候,打印出来是15.16998,所以就出现这样的结果饿了