我不知道我是否遗漏了一些明显的东西,但......
在IE,Opera和Chrome中,我得到的结果是以5结尾的舍入数字:
125 toPrecision(2) => 130
11.5 toPrecision(2) => 12
Run Code Online (Sandbox Code Playgroud)
这是我所期待的.
但是,Firefox更加"复杂",产生以下因素:
125 toPrecision(2) => 120 //wtf!!!
11.5 toPrecision(2) => 12
Run Code Online (Sandbox Code Playgroud)
经过一段时间的努力,我得出的结论是,Firefox正在使用"四舍五入"规则,如果5之前的数字是数字向下舍入,如果5之前的数字是奇数则数字轮数达:
0.5 => 0
1.5 => 2
2.5 => 2
3.5 => 4, etc.
Run Code Online (Sandbox Code Playgroud)
我使用圆形结果来测试学生解决工程问题的伪随机生成的问题输入.在Chrome,Chrome或Opera中,Chrome中输入的问题可能是h = 1020 mm,但h = 1030 mm.
我需要一个函数来使舍入保持一致,即我想要0.0001235舍入到0.000124并且我希望1234舍入到1240所以我不能使用简单的num = Math.floor(num + 0.5); 为了使问题复杂化,我希望输入变量和学生答案对于3 sig dig是正确的,除非第一个数字是1,在这种情况下我想要4个sig digs:
234.5 => 235
134.5 => 134.5
Run Code Online (Sandbox Code Playgroud)
我已经通过将数字转换为字符串并测试第一个非零,非小数点和非负字符"1"来攻击3或4个sig挖掘的解决方案,具体取决于第一个数字 - 不漂亮,但它的确有效.我可以为舍入问题做类似的事情,检查要舍入的数字是否为5,但我想知道是否有一个优雅的逐位解决方案.