求助各位大牛

fish748 2009-09-18 11:04:24
用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类型数在内存中的储存方式有关?

请帮忙解答
谢谢各位了~

...全文
104 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
itegel84 2009-09-19
  • 打赏
  • 举报
回复
四舍五入,浮点数表示然后+0.5,之后再取整...
fish748 2009-09-19
  • 打赏
  • 举报
回复
3L的,不好意思我写错了,出来的就是35.16,谢谢了
selooloo 2009-09-18
  • 打赏
  • 举报
回复
应该有关系,float 是4字节,double8字节更精确
aizibion 2009-09-18
  • 打赏
  • 举报
回复
浮点数得存储方式决定了数据得精确性不可靠,但是误差极小,不过既然是自己实现得东西,应用中完全可以用4舍五入来避免

http://www.cnblogs.com/jillzhang/archive/2007/06/24/793901.html
brookmill 2009-09-18
  • 打赏
  • 举报
回复
浮点数很可能有些误差的。
3518不太好解释,我得到的结果是3516,就很容易理解了:
35.17在内存里保存的有可能是 35.1699998
算下来就变成35.16了
fish748 2009-09-18
  • 打赏
  • 举报
回复
20分都没人来吗……

69,382

社区成员

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

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