编写一个求和函数sum(),要求达到如下情况和返回值效果。
sum(1, 2, 3, 4, 5); //返回值为15 sum(5, null, -5); //返回值为0 sum('1.0', false, 1, true, 1, 'A', 1, 'B', 1, 'C', 1, 'D', 1, 'E', 1, 'F', 1, 'G', 1); //返回值为10 sum(0.1, 0.2); //返回值为0.3,而不是0.30000000000000004
解析:
本题包含有2个知识训练点:一是如何剔除非数字参数,二是如何处理浮点数溢出问题。
排除非数字参数,可以有多种方法,最简洁的方法是使用parseFloat()函数与||运算符结合使用。先使用parseFloat()函数把参数转换为浮点数,如果成功则加上转换后的数值,否则加0,排除转换中的NaN值。
浮点数溢出可以通过升位浮点数为整数相加,然后再降位实现,最后使用toFixed()方法去掉溢出小数即可。
参考:
function sum() { var nResult = 0; for (var i = 0, l = arguments.length; i < l; i++) { nResult += 1000 * parseFloat(arguments[i]) || 0; } return nResult.toFixed(3) / 1000; } alert(sum(0.1, 0.2))