社区
C语言
帖子详情
double到int的奇怪情况
bbnhh
2011-05-16 10:40:19
请高手解释一下:
double i = 0.6;
int j = i*10.0;
printf("%d\n", j);
输出5
(i换成0.7,输出6)
我想可能是double到int转换时精度丢失,
但是。。。。
double i = 0.6;
printf("%f\n", i*10.0);
竟然输出的是6.00000, 这样的话转换到int不该输出5啊???
到底是为什么呢???
...全文
288
16
打赏
收藏
double到int的奇怪情况
请高手解释一下: double i = 0.6; int j = i*10.0; printf("%d\n", j); 输出5 (i换成0.7,输出6) 我想可能是double到int转换时精度丢失, 但是。。。。 double i = 0.6; printf("%f\n", i*10.0); 竟然输出的是6.00000, 这样的话转换到int不该输出5啊??? 到底是为什么呢???
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
16 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
xialong0410
2011-05-16
打赏
举报
回复
用2008试了一下是6,不是5
flyrack
2011-05-16
打赏
举报
回复
是gcc的问题 如果用float类型就是正常的
晨星
2011-05-16
打赏
举报
回复
如果楼主还想问:“那打印浮点数的时候保留多少位小数才能绝对精确呢?”答案是“多少位也做不到”,这是浮点数的特性决定的。
Thirty
2011-05-16
打赏
举报
回复
向ls学习。。。。。。
晨星
2011-05-16
打赏
举报
回复
比如数值5.999999999……,用舍入法(比如四舍五入)保留5位小数会变成:6.00000,而用舍去法变成整数就是5。
晨星
2011-05-16
打赏
举报
回复
[Quote=引用楼主 bb143 的回复:]
double i = 0.6;
printf("%f\n", i*10.0);
竟然输出的是6.00000, 这样的话转换到int不该输出5啊???……
[/Quote]
——这个推理不成立。
原因是:浮点数保留5位小数输出时一般采用“舍入法”,而转换成整数时一般采用“舍去法”。
不管是哪种,浮点数的精度问题都是存在的,所以,从前面输出的“6.00000”不能证明后面应该输出“6”。
赵4老师
2011-05-16
打赏
举报
回复
double用%lg
float用%g
我是风
2011-05-16
打赏
举报
回复
CodeBlocks10.05是5
sk_sakula
2011-05-16
打赏
举报
回复
VC6.0是6啊,应该是编译器的问题啊
bbnhh
2011-05-16
打赏
举报
回复
本人用的code blocks 10.05,
难道是这个编译器的问题???!!!
好垃圾啊!!!
晕!!
我真的是琦琦
2011-05-16
打赏
举报
回复
VC6.0输出6
luciferisnotsatan
2011-05-16
打赏
举报
回复
如果想要四舍五入,一个简单的方法就是加0.5
int j = i*10.0
+ 0.5
;
AnYidan
2011-05-16
打赏
举报
回复
不好意思
vs2010 输出 6
luciferisnotsatan
2011-05-16
打赏
举报
回复
编译器问题么?
可能乘下来是5.999999999这个接近于6的书。转int后就5了
我用的是vs2005,输出是6
ljt3969636
2011-05-16
打赏
举报
回复
什么编译器啊
double i = 0.6;
int j = i*10.0;
printf("%d\n", j);
是输出0.6啊
怎么判断各种值是不是为空
本文讨论了前端传递空数组到后端时出现的一个
奇怪
现象:后端接收到的对象虽然为空,但size却为1,包含一个空值。针对这种
情况
,提出了使用`good.getGoodImgList()==null||good.getGoodImgList().isEmpty()||good.getGoodImgList().get(0).equals()`这样的条件判断来确保正确检查空数组或空值。同时,对于
int
和
double
类型的零值判断,可以简单地通过`good.getCount()==0`和`good.getPrice()==0.0`进行检查。
C中
double
到
int
的转换、四舍五入
本文详细解析了C语言中
double
和float类型的表示方式、基础操作及四舍五入处理,包括内存表示、转换规则、精度损失、溢出处理和小数点限制,帮助开发者掌握浮点数的正确使用。
c语言
int
加
double
等于,关于C语言中
double
和
int
之间转换的
奇怪
结果
博客探讨了C语言代码中浮点数到整数转换时在Windows和Linux平台上出现的不同结果。问题源于浮点数的二进制表示不精确,导致在乘法和截断过程中产生微小差异。尽管这不是由于四舍五入错误,而是由于浮点数本身的近似性质。优化、内部表示和平台差异可能是造成这种行为差异的原因。
Java中的八种基本数据类型boolean、char、
int
、short、long、float、
double
及注意事项
本文详细介绍了Java中的八种基本数据类型:boolean、char、
int
、short、long、float、
double
,并列出了它们的位宽、字节数和取值范围,同时涵盖了特殊注意事项,如boolean的存储方式和类型提升规则。
初始化的数值(
int
、
double
等)(一)
本文探讨了在C++中使用模板类来安全初始化内置类型数据成员的方法,避免了直接使用内置类型可能导致的初始化错误和不一致性问题。通过引入模板类TNumber,实现了内置类型如
int
、
double
等的封装,确保了数据成员的正确初始化并提供了方便的转换和操作符重载。
C语言
70,038
社区成员
243,247
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章