c语言%f奇怪的问题!打破常规!!!

以前一直以为会四舍五入,今天测试这个的时候,发现解释不了,希望有人帮帮忙!图片说明

从统计学的角度,“四舍六入五成双”比“四舍五入”要科学,在大量运算时,它使舍入后的结果误差的均值趋于零,而不是像四舍五入那样逢五就入,导致结果偏向大数,使得误差产生积累进而产生系统误差,“四舍六入五成双”使测量结果受到舍入误差的影响降到最低。

不好意思,图片不清晰,i是3.1445 输出为3.144

咦?我也一直以为四舍五入的。难道不是吗?

因为很多浮点数在计算机内是无法精确存储的,你虽然double i = 3.1445;
但其实不能精确存储这个数(只能存储一个无限接近3.1445的数,可能是3.1444999999999999999(很多个9),也可能是3.144500000000000001(很多个0))
所以当最后一位是5的时候,哈哈要看运气了~~~

四舍六入五成双
http://www.zhihu.com/question/21662165

http://baike.baidu.com/link?url=78JLVpx0iiLUa6IfEicSSAqLPuUaxNuGj6aEjSGsw1eTKd9fsycozX8ofehW2rH1_JzPCF35eOht-VNL1zbBXq