社区
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啊???
到底是为什么呢???
...全文
227
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
作业
写回复
配置赞助广告
用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啊
C中
double
到
int
的转换、四舍五入
在一般的PC平台下sizeof(
double
)=8,
c语言
int
加
double
等于,关于C语言中
double
和
int
之间转换的
奇怪
结果
我的问题:尝试找出以下C代码段的结果:#include
int
main(
int
argc, char* argv[]){
double
a = 5.1;
int
b = a * 100;std::cout << b << std::endl;
double
c = 6.1;
int
d = c * 100;std::cout << ...
C#中
double
转
int
时需要注意的地方
这是个很
奇怪
的问题 一个
double
的大于0的数字转
int
后 竟然变成了负数 后来F12进入
Int
32里面看了发现 原来这个数字超过了
Int
32的最大值了
Int
32的范围: // 摘要: // 表示 System.
Int
32 的最大可能值。此字段...
C\C++中
int
、
double
等数据类型范围的理解
整型数据的描述方法、
double
和float型的有效精度
Java中的八种基本数据类型boolean、char、
int
、short、long、float、
double
及注意事项
Java中基本数据类型只有八种:boolean、char、
int
、short、long、float、
double
; 其中六大数值类型可以按照如下顺序排序: byte < short <
int
< long < float <
double
boolean(布尔型) 1bit(位...
C语言
70,020
社区成员
243,264
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章