初学C语言,不太明白内置的舍入规则到底是怎样的。为什么3.25和3.35都舍入到3.3了。
(PS:我不是想四舍五入TOT 我知道+0.05就可以了。我想知道的是float默认的舍入规则是什么。。)
C语言中float,double等类型,在内存中的结构
float在内存中的存储方式比较复杂,不能简单地理解为四舍五入或者向上取整或向下取整
"四舍六入五成双",也即"4舍6入5凑偶"这里"四"是指≤4 时舍去,"六"是指≥6时进上,"五"指的是根据5后面的数字来定,当5后有数时,舍5入1;当5后无有效数字时,需要分两种情况来讲:①5前为奇数,舍5入1;②5前为偶数,舍5不进。(0是偶数)
具体规则如下: 1.小于5舍去,即舍去部分的数值小于保留部分的末位的半个单位,则末位不变; 2.大于5进1,即舍去部分的数值大于保留部分的末位的半个单位,则末位加1; 3.等于5时取偶数,即舍去部分的数值,等于保留部分的末位的半个单位,则 末位凑成偶数,即当末位为偶数时,末位不变;当末位为奇数时,末位加1. 举例,用上述规则对下列数据保留3位有效数字: 9.8249=9.82,9.82671=9.83 9.8251=9.83,9.8350 =9.84 9.8250=9.82,9.82501=9.83
按以上规则来看的话,你的输出结果应该是 3.2,3.2,3.4,3.4.3.6然而并不是。
具体原因不明。
向偶舍入