整数转化为浮点数的问题

buffoon1 2011-01-21 09:25:20
int a = 1262491200
float b = (float)a;

当a被转化成浮点数b时,值就变成了1.2624911e+009.
b的值就变得比a的值小了,我必须得把a转化成浮点数,可是又不想改变它的值,该如何办?
...全文
2311 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
appx 2011-01-21
  • 打赏
  • 举报
回复
精度问题,float 32位还得除浮点小数表示位,这样虽然它能够表示的范围很大但是精确度不够,具体到这里就是整形部分的可精确为比32位int型数据要小,因而用double型来确保精度。
赵4老师 2011-01-21
  • 打赏
  • 举报
回复
float 精确到6位十进制有效数字
double 精确到15位十进制有效数字
赵4老师 2011-01-21
  • 打赏
  • 举报
回复
用10进制小数不能精确表示某些三进制小数0.1(3)=0.33333333333……(10)
同理,用二进制小数也不能精确表示某些10进制小数。


double b=(double)a;
printf("b=%.15g\n",b);
羽飞 2011-01-21
  • 打赏
  • 举报
回复
我也经常遇到这个样的问题,double也无法避免,这是精度与编译器转换时的问题,不过一般不回影响程序运行,不必太在意,而且浮点数比较就要考虑精度
wizard_tiger 2011-01-21
  • 打赏
  • 举报
回复
不会吧!
用double试试。
zy020118 2011-01-21
  • 打赏
  • 举报
回复
用double吧。。。
LaSt_C_ 2011-01-21
  • 打赏
  • 举报
回复
是变小了
flysnowhite 2011-01-21
  • 打赏
  • 举报
回复
浮点数运算都有精度损失,但一般误差都在可控范围之内。float类型一般有7位有效数字,double一般有15位,如果觉得float精度不够,可以使用double,或者long double。
kevinxin24 2011-01-21
  • 打赏
  • 举报
回复
用double,输出改为%lf就行了。
NowDoIT 2011-01-21
  • 打赏
  • 举报
回复
[Quote=引用楼主 buffoon1 的回复:]
int a = 1262491200
float b = (float)a;

当a被转化成浮点数b时,值就变成了1.2624911e+009.
b的值就变得比a的值小了,我必须得把a转化成浮点数,可是又不想改变它的值,该如何办?
[/Quote]
不是很懂哦,lz是想比较二者的大小吗?
henrycen 2011-01-21
  • 打赏
  • 举报
回复
int a = 1262491200;
float b = (float)a;
printf("%.1\n",b);

在我机器显示1262491200.0

69,373

社区成员

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

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