Firefox和Javascript舍入规则
Firefox and Javascript Rounding Rules
我不知道这里是否遗漏了一些明显的东西,但。。。
在IE、Opera和Chrome中,我从以5:结尾的四舍五入数字中得到了我所期望的结果
125 toPrecision(2) => 130
11.5 toPrecision(2) => 12
这正是我所期望的。
不过,Firefox稍微"复杂"一点,产生了以下内容:
125 toPrecision(2) => 120 //wtf!!!
11.5 toPrecision(2) => 12
经过一番挠头之后,我得出结论,Firefox正在使用一个"四舍五入"规则,如果5之前的数字是偶数,则向下取整,如果5前面的数字是奇数,则向上取整:
0.5 => 0
1.5 => 2
2.5 => 2
3.5 => 4, etc.
我使用四舍五入的结果来测试学生对工程问题的解决方案,并使用伪随机生成的问题输入。在Chrome中输入的问题可以是h=1020毫米,但在FF、Chrome或Opera中则为h=1030毫米。
我需要一个函数来使舍入一致,即我想要0.0001235取整到0.000124,我想要1234取整到1240,所以我不能使用简单的num=Math.floor(num+0.5(;更复杂的是,我希望输入变量和学生的答案正确到3个sig digs,除非第一个数字是1,在这种情况下,我想要4个sig digs:
234.5 => 235
134.5 => 134.5
我已经破解了一个解决方案,通过将数字转换为字符串,并测试第一个非零、非小数点和非负数字符"1"来解决取决于第一个数字的3或4 sig digs问题——不漂亮,但它有效。我可以对舍入问题做一些类似的事情,检查要舍入的数字是否是5,但我想知道是否有一个优雅的逐位解决方案。
关于"我想要0.0001235四舍五入到0.000124":这没有多大意义,因为与0.5、1.5、2.5等不同,小数0.0001235不能以基数2精确表示;因此其舍入可能略高于(a(或略低于(B(的精确值,其中(a(和(B(将产生不同的舍入:(a(为0.000124,(B(为0.000123。
即使经过一些计算后,将1.5等小数四舍五入为整数,(1.5(.toPreccision(2(也不一定会产生最接近精确值的值。原因是精确值可能刚好低于1.5,在这种情况下,正确的舍入为1,而不是2。这个问题被称为制表师的困境。
这也意味着,如果两个学生使用稍微不同的方法(都相当准确(并对他们的近似值进行舍入,他们将得到不同的舍入结果(尽管他们的近似可能非常接近(。在出现诸如0.0001235(四舍五入到0.000124(的平局的情况下,除非所有计算都准确进行,或者算法专门检查平局情况,否则制表师的困境是不可避免的。
然而,如果确切的结果是平局或非常接近平局,仍然可以检查学生是否回答了(a(或(B(。
- 浮点0.2+0.1舍入误差
- 谷歌材料图表:停止工具提示舍入
- jQuery - 带有一些数字的表格计算出现奇怪的舍入错误
- 有人可以详细解释这个 JavaScript 十进制舍入函数吗?
- 求和值时出现Javascript舍入问题
- 在追加文本中舍入数字输出
- Infrastics网络货币编辑舍入问题
- Javascript中的自定义舍入数
- 通过JavaScript将数字舍入到0.11的最接近倍数
- 是否可以在 JavaScript 中实现没有舍入问题的任意精度算术
- JavaScript 中的舍入问题
- 如何在不向上舍入的情况下删除尾随小数
- 适用于 IE8 的子像素舍入 JavaScript/jQuery 解决方案,用于具有百分比宽度的表格单元格
- 十进制值会自动舍入
- 将浮点数向上舍入到 javascript 中的下一个整数
- Javascript中的舍入问题
- JavaScript:在 .5 种情况下向下舍入
- 使用 toFixed 对十进制数字进行舍入
- 在javascript中不带舍入的十进制比较
- Firefox和Javascript舍入规则