社区
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啊???
到底是为什么呢???
...全文
202
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 常用函数集成库编写教学不定期持续更新
MT5常用函数集成库编写(不定期持续更新)1.主要面向有一定基础的学员;2.想编写EA苦于不知道如何下手的学员!3.能看懂代码的学员!4.不啰嗦直接上干货!5.固定框架式编程!6.面向对象,面向函数式编程! //---//--- 交易.追踪止损(Symbol(),追踪点值,magic号码); 指标.句柄至数组(zh,中,0,10); bool 在中枢之上=iLow(Symbol(),应用周期,1)>中[0]&&iLow(Symbol(),应用周期,2)>中[0]&&iLow(Symbol(),应用周期,3)>中[0]; bool 在中枢之下=iHigh(Symbol(),应用周期,1) bool 三连阳=交易.三连阴阳判断(Symbol(),应用周期,1,2); bool 三连阴=交易.三连阴阳判断(Symbol(),应用周期,1,1); bool 二连阳=交易.二连阴阳判断(Symbol(),应用周期,1,2); bool 二连阴=交易.二连阴阳判断(Symbol(),应用周期,1,1);
int
多持仓单数=交易.持仓单数统计(Symbol(),magic号码,POSITION_TYPE_BUY);
int
空持仓单数=交易.持仓单数统计(Symbol(),magic号码,POSITION_TYPE_SELL);
double
收0=iClose(Symbol(),应用周期,0);
double
收1=iClose(Symbol(),应用周期,1);
double
收2=iClose(Symbol(),应用周期,2);
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 << d << std::en...
C#中
double
转
int
时需要注意的地方
这是个很
奇怪
的问题 一个
double
的大于0的数字转
int
后 竟然变成了负数 后来F12进入
Int
32里面看了发现 原来这个数字超过了
Int
32的最大值了
Int
32的范围: // 摘要: // 表示 System.
Int
32 的最大可能值。此字段为常数。 public const
int
MaxValue = 2...
练习2问题:
double
i 和
int
i 的结果为什么不一样?
C 练习实例2 练习2 #include&amp;lt;stdio.h&amp;gt; void main() {
double
i;
double
b1,b2,b3,b4,b5,sum; b1=100000*0.1; b2=b1+100000*0.075; b3=b2+200000*0.05; b4=b3+200000*0.03; b5=b4+400000*0.015; pr
int
f(&quot;请输入当月利润:&q
C语言
69,369
社区成员
243,082
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章