首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

float 类型数据输出有关问题

2013-12-04 
float 类型数据输出问题scale 是float 类型, 以下是代码和输出信息,怎么会输出这样的结果?//.............

float 类型数据输出问题

scale 是float 类型, 以下是代码和输出信息,怎么会输出这样的结果?

//............................代码..................................
eLIBs_printf(".......App_PhotoFuctionShow.......1.4...scale=%6.4f.....\n", scale);
 
if(scale > 0)
{
scale -= 0.1;
eLIBs_printf(".......App_PhotoFuctionShow.......1.4.1...scale=%6.4f.....\n", scale);
}

eLIBs_printf(".......App_PhotoFuctionShow.......1.4.2...scale=%6.4f.....\n", scale);
if(scale < 1.0)
{
eLIBs_printf(".......App_PhotoFuctionShow.......1.4.2...<1.0..scale=%6.4f.....\n", scale);
gScene_photo_ctrl_key_t.enlarge = SCN_ZOOM_OUT;
}
eLIBs_printf(".......App_PhotoFuctionShow.......1.4.3..scale=%6.4f.....\n", scale);
//............................代码..................................


//..........................输出信息.................................
.......App_PhotoFuctionShow.......1.4...scale=0.0000.....
.......App_PhotoFuctionShow.......1.4.1...scale=-2.0000.....
.......App_PhotoFuctionShow.......1.4.2...scale=-2.0000.....
.......App_PhotoFuctionShow.......1.4.2...<1.0..scale=-2.0000.....
.......App_PhotoFuctionShow.......1.4.3..scale=-2.0000.....
//..........................输出信息.................................

[解决办法]
你的scale估计是0.0000000000000000000001这种,浮点数无法精确,所以输出的是0.0000
你改成这样应该就可以了:

if((scale-0)>1e5)

浮点数无法精确,比较所以处理的时候会很麻烦,不要直接进行比较。
[解决办法]
用10进制小数不能精确表示某些三进制小数0.1(3)=0.33333333333……(10)
同理,用二进制小数也不能精确表示某些10进制小数。

[解决办法]
引用:
Quote: 引用:

你的scale估计是0.0000000000000000000001这种,浮点数无法精确,所以输出的是0.0000
你改成这样应该就可以了:
if((scale-0)>1e5)

浮点数无法精确,比较所以处理的时候会很麻烦,不要直接进行比较。


if (scale>0) 正确的写法应是以下吗?

==> if((scale-0)>0.000001) 

具体精度按自己的情况取,浮点数一般是是这样比较的。因为如你所见的,当非常接近这个浮点数的时候比较会出现异常。最好把0写成0.0浮点数的格式。
[解决办法]
理解

计算机中整型数据最精确
[解决办法]
看看内存中到底是什么
[解决办法]
引用:
Quote: 引用:

用10进制小数不能精确表示某些三进制小数0.1(3)=0.33333333333……(10)
同理,用二进制小数也不能精确表示某些10进制小数。


用10进制小数不能精确表示某些三进制小数0.1(3)=0.33333333333……(10)? 为什么?

如何理解你的意思? 


3进制的0.1
转换成10进制就是0.33333333……

热点排行