阅读:1506回复:10
奇怪的C类型转换问题:
目的:将字符串“163.45”转换成16345。
代码如下: #include <conio.h> #include <stdlib.h> #include <stdio.h> void main() { char *cha=\"163.45\"; double x1; long int num; x1=atof(cha); x1=x1*100; num=x1; printf(\"cha:%s x1:%f num:%d\",cha,x1,num); printf(\"\\n Press any key return\"); getch(); } 在BC31下调试通过。(OS:win98se2,win2k p) num的值竟然不是16345,而是16344。为什么?! 将字符串换成其他的暂未发现同样的问题。 请大家帮忙测试一下,看看问题在哪。 |
|
|
沙发#
发布于:2002-11-21 09:55
build warning:
conversion from \'double\' to \'float\', possible loss of data 我的修改: #include <conio.h> #include <stdlib.h> #include <stdio.h> void main() { char *cha=\"163.45\"; //double x1; float x1; float num1; unsigned long num; x1=atof(cha); x1=x1*100; num1=x1; num =num1; printf(\"cha:%s x1:%f num:%d\",cha,x1,num); printf(\"\\n Press any key return\"); getch(); } 给分喔!!! |
|
|
板凳#
发布于:2002-11-21 09:57
我在VC CONSOL APP中得到了16345。
|
|
|
地板#
发布于:2002-11-21 10:00
用sscanf(ch, \"%f\", &x1);
|
|
|
地下室#
发布于:2002-11-21 10:03
long 为32位
double 为64位 把你的 long类型的num改为double类型再适一下 |
|
|
5楼#
发布于:2002-11-21 12:14
我只是奇怪,为什么在其他的数据没有问题呢?
如果改变了数据类型就太麻烦了。 我现在是这样处理的: 把x1=x1*100; 改成: x1=x1*10; x1=x1*10; 就好了。 太讨厌了。 :( :( :( :( :( |
|
|
6楼#
发布于:2002-11-21 15:57
char cha[]=\"163.45\";
|
|
7楼#
发布于:2002-11-22 08:33
num=x1 //舍弃小数部分(总会有某些数有问题,如16344.9 --> 16344)
num=x1+0.5 //四舍五入(应该没问题了) |
|
|
8楼#
发布于:2002-11-22 08:35
以上是因为浮点数不是“精确”的。
|
|
|
9楼#
发布于:2002-11-22 10:45
char cha[]=\"163.45\"; 老大,这样是啃腚不行的。 呵呵。 :D :D :D |
|
|
10楼#
发布于:2002-11-22 17:21
num =num1;
改为: num =num1+0.5; 一切OK。 请参考我在xici C++Builder论坛发表的贴子 |
|
|