社区
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该怎么办??
...全文
287
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写文章
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语言数据类型级别由高到低
数据类型,很多的编程爱好者都不陌生,小编今天记录一下数据类型级别由高到低,方便日后查阅,提前做个总结,同时也希望小编的一个文字总结,能快速的帮到
困惑
着解决问题,那么C语言数据类型级别由高到低如下: ...
C++ 类型
转
换
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"); } 程序...
java max(
int
int
eger)_Java整数类型原语是否在
转
换类型的MAX_
INT
处“加盖”?
我试图找出一些非常奇怪的Java行为 ....最终我发现了这个问题,但对我来说这个行为仍然很奇怪:一个
double
直接
转
换为
int
似乎被限制在 MAX_
INT
为有符号整数,而
double
转
换为 long 然后被
转
换为
int
给...
double
d C语言,1,若有以下定义,char a;
int
b;float c;
double
d;... 若有以下语句,则正确的描述是,C语言...
int
b;float c;
double
d;... 若有以下语句,则正确的描述是,C语言1,若有以下定义,char a;
int
b;float c;
double
d;... 若有以下语句,则正确的描述是,C语言相关问题:匿名网友:答案:
double
类型参考:“隐式类型
转
换...
CString
转
换成
int
CString类相应函数
CString 型
转
化成
int
型 把 CString 类型的数据
转
化成整数类型最简单的方法就是使用标准的字符串到整数
转
换例程。 虽然通常你怀疑使用_atoi()函数是一个好的选择,它也很少会是一个正确的选择。如果你准备使用 ...
C++ 语言
64,634
社区成员
250,963
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章