首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

数据转换出问题

数据转换出问题

目前在程序中遇到一些"怪"问题,还望各位帮帮忙!

问题如下:

1、在codewarrior中将一个long型的变量赋给一个double型的变量时数据就出现了错误!

eg: long a=229525213;

double r=0;

r=a; //调试程序时查看到r的值为:229525216 ,转换后数据就出现了这种差错!!!

2、在codewarrior中对一个double型的大数进行除以100的运算后在赋给一个double型的数据后就错了!

eg: double a=232608096;

double b=a/100; // //调试程序时查看到b的值为:2326081.00000 ,计算后数据就出现了这种差错!!!

3、在codewarrior中将一个大数赋给一个double型变量时调试程序查看变量值时小数点后的数据显示不出来,但直接在查看变量处给它加上一个小数,它就能将值后面的小数部分显示出来,真的很“奇怪”,不知为何会出现这种现象?

eg: double n=4187645632.1325; //调试程序时查看到n的值为:4187645632.00000; 小数部分没显示出来

//但表达式:n+0.23589 的值为:4187645632.23589;小数部分显示出来

double m=n+0.23589; ////调试程序时查看到m的值为:4187645632.00000; 小数部分仍没显示出来

望各位朋友帮忙看一下,谢谢了!

这跟浮点数精度有关,误差是正常的。

" Edit " -> "( Target Name )Setting " -> " Target " -> " Compiler for ..... " -> " Type Sizes "

这里面有设置double类型的定义,默认的是32bit的,跟float一样,如果选的是64bit的话,精度会更高一点,不过数太大的话就很难说了....

[此贴子已经被作者于2008-9-23 16:59:09编辑过]

兄弟,我在软件中没有找到

" Edit " -> "( Target Name )Setting " -> " Target " -> " Compiler for ..... " -> " Type Sizes ",能具体说明一下在哪能找到吗?

我用的是CW8.0,片子是MC56F8037

我用的是4.6和6.1版本的,都有这个选项,8.0的倒没用过,应该差不多的。

4.6版:

" Edit " -> " P&E Multilink CyclonePro Settings " -> " Target " -> " Compiler for HC12 " -> " Type Sizes "

6.1版:

" Edit " -> " Standard Settings... " -> " Target " -> " Compiler for HC08 " -> " Type Sizes "

8.0的话应该是类似的,你找找看吧。

谢谢兄弟了,在CW8.0里还是没有找到设置类型大小的设置键

可能是我们用的数据太大了,我们用到上亿的数据,不过这点误差对我们控制影响不是很大.可能与编译器也有关系,在VC里不会出现这种情况.

再次感谢.

[此贴子已经被作者于2008-9-25 11:51:17编辑过]

把double改成64bit能解决问题,我试过了

[此贴子已经被作者于2008-9-25 12:51:42编辑过]

谢谢fayefayehoo兄弟,看来CW8.0编译器还不完善,CW8.0中在Target一栏中只有你这个版本中的前5个,找不到设置数据类型的那栏,在别的地方也找了好久还是没有找到.看来什么时候能完善成你用的这个版本.

返回列表