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进制小数。
用10进制小数不能精确表示某些三进制小数0.1(3)=0.33333333333……(10)? 为什么?
如何理解你的意思?