在JavaScript中使用`toFixed(1)`不能增加0.1

时间:2017-09-27 20:09:58

标签: javascript

我正在尝试创建两个方法:一个用于将数字增加0.1,另一个用于减少相同的值。但是我遇到了一个意想不到的行为:我可以使用number = (number - 0.1).toFixed(1);正确地减少数量,但是当我试图以相同的方式增加数量时(它只能运行一次),我得到了错误:< / p>

  

“Uncaught TypeError :( number + 0.1).toFixed不是函数”

以下是代码:

var number = 0.5;
console.log('Number: ', number)

function increase() {
  if (number < 1) {
    number = (number + 0.1).toFixed(1);
    console.log('Number: ', number)
  }
}

function decrease() {
  if (number > 0) {
    number = (number - 0.1).toFixed(1);
    console.log('Number: ', number)
  }
}
<button onclick="increase()">Increase</button>
<button onclick="decrease()">Decrease</button>

我的问题是:为什么?我应该如何更正我的代码,修复我的increase方法?

提前致谢

2 个答案:

答案 0 :(得分:5)

toFixed()方法返回string类型,string没有toFixed()方法 - 导致错误.toFixed is not a function

要解决此问题,请将toFixed()的输出强制恢复为number。这可以使用Number()或前缀+的简写方法来完成。

  • Number((0.1).toFixed())
  • +(0.1).toFixed()

var number = 0.5;
console.log('Number: ', number)

function increase() {
  if (number < 1) {
    number = Number((number + 0.1).toFixed(1));
    console.log('Number: ', number)
  }
}

function decrease() {
  if (number > 0) {
    number = Number((number - 0.1).toFixed(1));
    console.log('Number: ', number)
  }
}
<button onclick="increase()">Increase</button>
<button onclick="decrease()">Decrease</button>

答案 1 :(得分:3)

toFixed方法的返回值是一个字符串,如MDN web docs中所述:

  

返回值:使用定点表示法表示给定数字的字符串。

因此,在第一次调用increasedecrease时,变量number的值将为字符串类型。

之后调用increase

number + 0.1的类型为字符串,因为字符串+数字字符串toFixed不是的函数字符串 s,这就是你得到错误的原因:

  

未捕获的TypeError :(数字+ 0.1)。toFixed不是函数

但是,number - 0.1会有效,因为字符串 - 数字数字,这很好。

要解决此问题,您应该保留数字number,并且可以通过多种方式执行此操作:

number = parseFloat((number + 0.1).toFixed(1));

  • 使用Number对象构造函数:

number = Number((number + 0.1).toFixed(1));

  • 使用+

number = +((number + 0.1).toFixed(1));