社区
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啊???
到底是为什么呢???
...全文
203
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啊
MT5 常用函数集成库编写教学不定期持续更新
int
多持仓单数=交易.持仓单数统计(Symbol(),magic号码,POSITION_TYPE_BUY);
int
空持仓单数=交易.持仓单数统计(Symbol(),magic号码,POSITION_TYPE_SELL);
double
收0=iClose...
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型的有效精度
C语言
69,371
社区成员
243,080
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章