社区
C++ 语言
帖子详情
double转unsigned int的困惑!
cyy200
2004-08-04 03:19:59
.....
double i=2.3;
unsigned int j=i;
unsigned int k=(i-j)*100.0;
........
为什么输出出k=29,而不是k=30;???要得30该怎么办??
...全文
314
4
打赏
收藏
double转unsigned int的困惑!
..... double i=2.3; unsigned int j=i; unsigned int k=(i-j)*100.0; ........ 为什么输出出k=29,而不是k=30;???要得30该怎么办??
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
4 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
hellwolf
2004-08-04
打赏
举报
回复
double转int时,编译器会在编译期给出警告,这种转换丢失信息
dodont
2004-08-04
打赏
举报
回复
叹,好。
wmajia
2004-08-04
打赏
举报
回复
楼上的猜测应该是对的,在VC下看了下生成的汇编代码如下,有浮点运算,遇不懂,但 ST0 = +2.99999999999999822e-0001:还是用红色显示的,比较明显:)
48: unsigned int k=(i-j)*100.0;
00401321 mov eax,dword ptr [ebp-0Ch]
00401324 mov dword ptr [ebp-18h],eax
00401327 mov dword ptr [ebp-14h],0
0040132E fild qword ptr [ebp-18h]
00401331 fsubr qword ptr [ebp-8]
00401334 fmul qword ptr [__real@8@4005c800000000000000 (0042a020)]
0040133A call __ftol (0040147c)
0040133F mov dword ptr [ebp-10h],eax
49:
50: cout<<k<<endl;
EAX = 00000002 EBX = 7FFDF000
ECX = 00000000 EDX = 00000000
ESI = 00000000 EDI = 0012FF80
EIP = 00401334 ESP = 0012FF1C
EBP = 0012FF80 EFL = 00000202 CS = 001B
DS = 0023 ES = 0023 SS = 0023 FS = 0038
GS = 0000 OV=0 UP=0 EI=1 PL=0 ZR=0 AC=0
PE=0 CY=0
0042A020 = 4059000000000000
ST0 = +2.99999999999999822e-0001
ST1 = +0.00000000000000000e+0000
ST2 = +0.00000000000000000e+0000
ST3 = +0.00000000000000000e+0000
ST4 = +0.00000000000000000e+0000
ST5 = +0.00000000000000000e+0000
ST6 = +0.00000000000000000e+0000
ST7 = +0.00000000000000000e+0000
CTRL = 027F STAT = 3820 TAGS = 3FFF
EIP = 00401331 CS = 001B DS = 0023
EDO = 0012FF78
铖邑
2004-08-04
打赏
举报
回复
可能是i=2.3内部表现是2.2999999......,所以结果是29,可以通过四舍五入得到30
unsigned int k=(i-j)*100.0+0.5;
C Primer Plus 第六版中文版勘误表
注意:下面的勘误中,红色字体为修改后的文字,提请各位读者注意。 1. 第6页,” 1.6语言标准”中的第3行,将1987年修改为1978年。 2. 第22页,” 2. main()函数”中的第1行,
int
main (void)后面的分号(;)删除。 3. 第24页,“5. 声明”的第10行,也就是一个变量、函数或其他实体的名称。 4. 第27页,图2.3中,下划线应该只包含括号中的内容;第2段的第4行,而不是存储在源代码中的指令。 5. 第30页,“2.5.4 打印多个值”的第4行,双引号后面的第1个变量。 6. 第34页,“2.7.3 程序状态”第2段的第4行,要尽量忠实于代码来模拟。 7. 第35页,“2.10 本章小结”第2段的第1句,声明语句为变量指定变量名,并标识该变量中存储的数据类型;本页倒数第2行,即检查程序每执行一步后所有变量的值。
Bjarne Stroustrup 对C++程序员的忠告
Bjarne Stroustrup 对C++程序员的忠告
高校非计算机专业C语言课程教学改革初探.pdf
高校非计算机专业C语言课程教学改革初探.pdf
C/C++类型
转
换(9)
类型
转
换
C++ 类型
转
换
例1:
int
main() {
unsigned
int
a = 0x123456f7;
unsigned
char i = (
unsigned
char)a; char *b = (char*)&amp;a; pr
int
f("%08x,%08x\n", i, *b); system("pause"); } 程序结果输出为:000000f...
C++ 语言
65,189
社区成员
250,526
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章