我用VC6.0调试时,遇到这种情况:用CString格式化一个float,结果尾数出现了偏差。调试时的截图:


这是什么原因,求教
------解决思路----------------------
因为很多浮点数用二进制就没办法精确表示,不信楼主查看float f = 0.1f;
float有效位就7位,而如果写成%f,一般会取到小数点后5位,也可能是不准确的
所以建议楼主要么写成%0.3f只取3位,要么使用精度更高的double(虽然他也不能绝对精确,但通常够了)
------解决思路----------------------
double怎么可能是一样的呢,你多搞几位就看出来了,比如
float aa = 777777.78956f 和double aa = 777777.78956
所以尽量用double,不要用float
------解决思路----------------------
我帮你用VC6与VS均调试过,不会出现你说的现象啊,得到的字符串为:“777.987000”
------解决思路----------------------
二进制本来就不能精确表示浮点数,总是有误差的,不管是用float还是double,但是无论如果,不可能出现3位数就有这么大偏差。
而且,内存中的数显示有误差。
------解决思路----------------------
%.6g