Javascript toFixed不是一个函数。

7
嗨,问题如下:
我定义了:
var total = 0;

function add(a){
  total+=a;
  var float_num = total.toFixed(2);
  return float_num;
}

JS 给我一个错误,说 Uncaught TypeError total.toFixed 不是一个函数

我不太明白。我声明的 total 不是数字类型吗?


确保total是一个数字。 - evolutionxbox
我刚在Chrome控制台中运行了你的代码,一切看起来都很好。你在哪里测试了你的代码? - khanmizan
尝试使用add("1")。它会产生错误。这就是我认为正在发生的事情,如果您从网页中获取输入,那么这是一个容易犯的错误。 - slebetman
哦,没错。我认为你需要使用 parseFloat(a) - khanmizan
我找到问题了。我的另一个函数有一段代码 xxx.text(total),它实际上将 total 转换为字符串,这就导致了问题。感谢您的所有帮助! - user3566769
7个回答

20

我认为防止错误发生的最简单方法是始终将参数解析为数字:

var total = 0;
function add(a){
  total+=a;
  var float_num = Number(total).toFixed(2);
  return float_num;
}

1
我们能否将此作为被接受的答案,需要有权限的人来确认。 - blissweb

0

好的,我已经运行了你的代码几次,可以确认你的.toFixed()代码行正常工作。

然而,它只能在将数字值传递到函数中时才有效。如果a参数不是数字,则toFixed()将会失败。

所以问题不在于函数本身,而在于你如何调用它。在你的问题中,你没有展示你如何调用这个函数,因此我无法直接指导你,除了确保每次都给它一个数字。

也许你正在传递一个字符串?那会破坏一切(即使该字符串包含数字值)。

或者可能由于系统其他地方的错误或疏忽,它是nullundefinedNaN?我无法确定,但在这些情况下,你可能根本不想调用add()函数。


0

我找到问题了。我的另一个函数有一段代码 xxx.text(total)。它实际上将 total 转换为字符串,这就导致了问题。

感谢你们的帮助!


0

检查上述代码是否重新定义了Number原型上的toFixed方法,例如:

Number.prototype.toFixed = {};

var total = 0;

function add(a) {
    total += a;
    var float_num = total.toFixed(2);
    return float_num;
}

add(2)

这是复制错误的一种方法。


0

这取决于变量 a 的值。如果 a 恰好是一个 "string",那么你正在尝试执行以下操作:

"0string".toFixed(2)

应该抛出一个错误。


0

这个有效:

var total = 1.0;

function add(a) {
    total += a;
    var float_num = total.toFixed(2);
    return float_num;
}

console.log(add(4.89));

这段代码有点不安全,因为你假设a是一个浮点数而不是一个字符串。

https://jsfiddle.net/6to7kbbm/

这将抛出异常:

var total = 1.0;

function add(a) {
    total += a;
    var float_num = total.toFixed(2);
    return float_num;
}

console.log(add("4.89"));

0

验证您是否有与正在使用的变量同名的已声明函数。为了防止这种情况,您可以声明全局变量,例如:

var global_variable = 0;
function myfunction()
{
    var variable = 0; 
    global_variable = variable + 1;
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接