toFixed()一不小心踩了一个坑

toFixed,多么简单的一个函数,昨天突发奇想做两道算法题练练手。结果,踩到了一个从未遇到的坑!

简单来讲是要对输入的很多组数据,自己写一个函数做个处理,把每次函数处理的结果要相加求和。最后输出的结果要保留4位小数。题目不算难,因为我使用js做的,很多在线OJ也支持js的输入输出,所以呢,直接就想到了toFixed()函数来保留小数位。

但是由于这里要对很多组数据处理,所以最开始我就把这些数据按组划分了,依次执行写好的功能函数。然后大概意思是res += ares代表最终要返回的结果,也就是相加求的和,a代表每次函数运行的结果。在我看似应该可以AC的程序,然而!意外发生了。

比如我第一次函数得到的结果是0.1000, 第二次是0.1500,第三次是0.2000,我觉得应该输出0.4500可是最后OJ上输出结果,具体值我忘了,大概输出的值是这三个结果的字符串拼接?excuse me ? 拼接? why?来来回回看了好几次程序,这思路没有问题啊? 每次程序处理的console结果也是对的,可是为什么最后的结果是有问题的?

...
...
...
...
冥思苦想中...
...
...
...

最后发现, 每次执行功能函数的那个地方不能toFixed(),只能最后在相加的结果中做一次toFixed(),这样结果就是对了。
orz~

原文地址:https://www.cnblogs.com/Yfling/p/7105117.html