“四舍六入五成双”算法学习

“四舍六入五成双”又称为“四舍六入五凑偶”,是一种比较精确比较科学的计数保留法。从统计学角度来说,这种算法要比传统的“四舍五入”更精确。在大量运算时,它使舍入后的结果误差的均值趋于零,而不是像四舍五入那样逢五就入,导致结果偏向大数。

上述算法的规则如下:

根据需要保留的有效位数,其后的数字应该进行舍入。
当有效位数后一位的数字≤4时,其后的数字直接舍去;
当有效位数后一位的数字≥6时,其后数字舍去并进1;
当有效位数后一位的数字=5时,要分两种情况:

  • 5后面一位的数字如果不等于0,则舍5进1;
  • 5后面一位数字如果等于0,又要分两种情况:
    • 5的前面如果是奇数,则舍5进1;
    • 5的前面如果是偶数,则舍5不进;

JavaScript中的四舍五入方法

之前,我是一个JavaScript小白,对jQuery的理解也仅限于基本功能的使用。最近在看《JavaScript DOM编程艺术》,算是在自学一点儿基础知识。实例中有一个函数需要对结果进行四舍五入,保留小数点后一位数字。然后就查阅了W3School的参考文档,发现Number对象有一个toFixed()方法,完全符合我的要求。

toFixed(num)只有一个参数num,用来规定需要保留的小数位数,取值在0~20之间,超出这个范围则抛出异常。当然,如果调用这个方法的对象不是一个Number时也会抛出异常。

var num = 10/3;
alert(num.toFixed(2));

执行上面的代码,可以看到输出的结果是3.33

一个逗号引发的JavaScript血案


这两天重构了一个商城模板的首页,在最后完成时,我按照惯例进行兼容性测试。通常我测试的浏览器一般是IE系列(6、7、8、9)、Firefox和Chrome。网页在Firefox和Chrome中正常显示,IE8和IE9也正常。但在IE6和IE7中出现了一个奇怪的Bug,最终花费几个小时,请朋友帮忙,终于找出罪魁祸首,原来是我使用的一个名为soChange的jQuery插件,因为我多加了一个逗号,因此我将本文命名为一个逗号引发的JavaScript血案。