void main()
{
char c;
int i;
double d=16.8,t=16.000000;
c=(int)d;
i=(int)d;
i=i-c; //char向int赋值,结果=0,没出错
i=(int)d;
d=d-i; //int向double赋值,结果为0.7999992,出错了
d=16.8;
d=d-c; //结果同上,出错
d=16.8;
d=d-t; //奇怪的是,这个结果也和上面一样出错
}
6 个解决方案
#1
不知道你用的是什么编译器,我用VC6测试了一下没有说的问题
double有15-16位的精度,不应该出这样的问题
float只有7位,倒有可能这样
double有15-16位的精度,不应该出这样的问题
float只有7位,倒有可能这样
#2
嗯 对 在vc中是没问题,我用的是keil 2版本
我把keil4 也一样
我把keil4 也一样
#3
keil没用过
刚才在网上搜索了一下,据说是keil没有double只有float,好像是说就是定义为double系统里也是
按照float处理
刚才在网上搜索了一下,据说是keil没有double只有float,好像是说就是定义为double系统里也是
按照float处理
#4
float 试过 也不行 真不好办
这样 计算显示的数据就完全错了
这样 计算显示的数据就完全错了
#5
主要在于二进制能否准确的表达浮点数
#6
就是float不行,float只有6-7位的精确度0.7999992刚好7位所以有出错的可能
keil里的double相当于float所以才出现你的情况啊
网上说要搞高精度的要自己找库用或者自己写程序实现
keil里的double相当于float所以才出现你的情况啊
网上说要搞高精度的要自己找库用或者自己写程序实现
#1
不知道你用的是什么编译器,我用VC6测试了一下没有说的问题
double有15-16位的精度,不应该出这样的问题
float只有7位,倒有可能这样
double有15-16位的精度,不应该出这样的问题
float只有7位,倒有可能这样
#2
嗯 对 在vc中是没问题,我用的是keil 2版本
我把keil4 也一样
我把keil4 也一样
#3
keil没用过
刚才在网上搜索了一下,据说是keil没有double只有float,好像是说就是定义为double系统里也是
按照float处理
刚才在网上搜索了一下,据说是keil没有double只有float,好像是说就是定义为double系统里也是
按照float处理
#4
float 试过 也不行 真不好办
这样 计算显示的数据就完全错了
这样 计算显示的数据就完全错了
#5
主要在于二进制能否准确的表达浮点数
#6
就是float不行,float只有6-7位的精确度0.7999992刚好7位所以有出错的可能
keil里的double相当于float所以才出现你的情况啊
网上说要搞高精度的要自己找库用或者自己写程序实现
keil里的double相当于float所以才出现你的情况啊
网上说要搞高精度的要自己找库用或者自己写程序实现