当前位置: 首页 > 知识库问答 >
问题:

Javascript toFixed()方法中的舍入[duplicate]

洪景铄
2023-03-14

我知道javascript中的toFixed()方法将数字转换为字符串,保留指定的小数位数,就像下面显示的代码一样,它将小数点后的位数设置为2。

我的问题是:这个数字是否在必要时四舍五入。在下面的代码中,我将转换数字:0.075。我认为0.075四舍五入应该是0.08,因为“5上升”。然而,在下面的第一个案例中,它看起来很奇怪。所以我很困惑。

var a=0.25*0.3;
var res1 = a.toFixed(2);
console.log(res1);
//Output: a is 0.07 (Is there something wrong?)

var b=0.025*3;
var res2= b.toFixed(2);
console.log(res2);
//Output:b is 0.08

我知道这个问题可以用Math.js解决。然而,我只是想知道问题的原因是什么?是toFixed()方法的问题还是javascript中的数据类型的问题。

共有2个答案

隗锐进
2023-03-14

您遇到的问题并不是JavaScript特有的,它在计算中是常见的。

这两种算术计算结果相同–0.075:

  • 0.25*0.3=0.075
  • 0.025*3=0.075

这是常用的十进制数制。

然而,计算机的核心不是十进制,而是二进制——一切都基于0和1。

正因为如此,他们实际上很难正确计算。JavaScript和其他编程语言必须近似结果,给你这样的:

  • 0.25 * 0.3 = 0.75
  • 0.025 * 3 = 0.07500000000000001

您现在可以看到为什么toFig返回不同的结果:

  • 0.75.to固定(2)=0.07
  • 0.07500000000000001.to固定(2)=0.08
孟安民
2023-03-14

如文档中所述,toFixed()在必要时进行取整。舍入行为是在-0.5范围内舍入

你观察到的奇怪行为与上面链接的文档中的注释一致:

浮点数不能精确地表示二进制中的所有小数,这可能会导致意外的结果,如0.1 0.2 === 0.3返回false。

换句话说,这是浮点精度损失的经典案例——几乎在任何语言中都会遇到这个问题。如果您观察ab的完整输出,您将看到由于浮点精度,a==0.075b==0.07500000000000001-因此给定这些值将a舍入为.07b舍入为.08符合定义的舍入行为。

 类似资料:
  • 本文向大家介绍Javascript中 toFixed四舍六入方法,包括了Javascript中 toFixed四舍六入方法的使用技巧和注意事项,需要的朋友参考一下 javascript中toFixed使用的是银行家舍入规则。 银行家舍入:所谓银行家舍入法,其实质是一种四舍六入五取偶(又称四舍六入五留双)法。 简单来说就是:四舍六入五考虑,五后非零就进一,五后为零看奇偶,五前为偶应舍去,五前为奇要进

  • 本文向大家介绍JavaScript中用于四舍五入的Math.round()方法讲解,包括了JavaScript中用于四舍五入的Math.round()方法讲解的使用技巧和注意事项,需要的朋友参考一下  此方法返回一个数四舍五入为最接近的整数的值。 语法 下面是参数的详细信息:     x: 一个数字 返回值: 返回数字四舍五入为最接近的整数的值。 例子: 这将产生以下结果:

  • 问题内容: 给定以下代码,我希望它返回“ float = 32000.0001”。但是,它返回“ float = 32000.0”。 我可以采取一些措施来防止/控制舍入吗?我要返回没有四舍五入的完整值。 问题答案: 浮点数只有24位精度,不足以容纳您的值中的位数。四舍五入不是由于解析,而是由于数字的大小。如果需要浮点数,则必须使用double;如果需要任意精度,则必须使用BigDecimal。

  • 本文向大家介绍php实现四舍五入的方法小结,包括了php实现四舍五入的方法小结的使用技巧和注意事项,需要的朋友参考一下 本文实例总结了php实现四舍五入的方法。分享给大家供大家参考。具体分析如下: php实现四舍五入的三种方法,分别通过number_format函数、round函数和sprintf格式化输出的方法实现四舍五入 1.number_format 方法实现四舍五入 2.round方法实现

  • 本文向大家介绍javascript中toFixed()四舍五入使用方法详解,包括了javascript中toFixed()四舍五入使用方法详解的使用技巧和注意事项,需要的朋友参考一下 最近做的项目涉及到金额的计算,有一种方式就是进行四舍五入的规则进行小数点后面的尾数处理,以前一直以为toFixed方法就是四舍五入的,知道一个用户反馈了金额计算的bug我才如梦初醒(亏了一毛钱),才仔细深究了下toF

  • 本文向大家介绍javascript进行四舍五入方法汇总,包括了javascript进行四舍五入方法汇总的使用技巧和注意事项,需要的朋友参考一下 原生 javascript 中四舍五入的函数 toFixed(n) , n为要保留的小数位数。 (0<= n <=20) http://jsfiddle.net/14x0vhu6/ 输出值不是预想的1.0999,而是  1.0999000000000000