1208 float 浮点数 int 乘法 奇怪 四舍五入 1

四舍五入

 四舍五入是一种应用非常广泛的近似计算方法,其有算术舍入法和银行家舍入法两种。
    所谓算术舍入法,就是我们通常意义上的四舍五入法。其规则是:当舍去位的数值大于等于5时,在舍去该位的同时向前位进一;当舍去位的数值小于5时,则直接舍去该位。
 
    所谓银行家舍入法,其实质是一种四舍六入五留双(又称四舍六入五奇偶)法。其规则是:当舍去位的数值小于5时,直接舍去该位;当舍去位的数值大于等于6时,在舍去该位的同时向前位进一;当舍去位的数值等于5时,如果前位数值为奇,则在舍去该位的同时向前位进一,如果前位数值为偶,则直接舍去该位。

(VB Round函数 描述 返回一个数值,该数值是按照指定的小数位数进行四舍五入运算的结果。)

    口诀:
四舍六入五考虑,
五后非零就进一,
五后皆零看奇偶,
五前为偶应舍去,
五前为奇要进一

:“四舍六入五考虑,五后非零就进一,五后皆零看奇偶,五前为偶应舍去,五前为奇要进一。”就是说,如果省略的尾数最高位是4或小于4,就将尾数都舍去;如果省略的尾数最高位是6或大于6,去掉尾数后,要向它的前一位进1;

VB6中文版说这个函数是四舍五入函数,实际上这个函数采用的四舍六入五留双。VB的Round所采用的算法是这样的:
1.25留一位,则1.2=round(1.25)
如果是1.35,则1.4=round(1.35)
奇进偶不进。这样在一大串需要四舍五入的数相加相减相乘时误差小一点。eg:1.25+1.35+1.45+1.55+1.15+1.65=8.4=round(1.25)+round(1.35)+round(……
ROUND函数符合国家和国际标准,该函数是正确的。原先的四舍五入只是一个简化。

一个极其简单的函数,分别用VC6 BC31和LINUX GCC编译,都出现一个莫名其妙的问题:
int sfsf(float f)
&leftsign;
 int sd=2000;
 return (int)(f*sd);
&rightsign;

int main(int argc, char* argv[])
&leftsign;
 float f=1.2435;
 float ss=sfsf(f);
 return 0;
&rightsign;

猜猜现在 SS 是多少? 2487 ? 呵呵,2486!!

原创文章,转载请注明: 转载自YippeeSoft开心软件

本文链接地址: 1208 float 浮点数 int 乘法 奇怪 四舍五入 1

历史博文

标签:, , ,