【问题标题】:Why does Firebug say toFixed() is not a function?为什么 Firebug 说 toFixed() 不是函数?
【发布时间】:2012-12-27 18:12:31
【问题描述】:

我正在使用 jQuery 1.7.2 和 jQuery UI 1.9.1。我在滑块中使用下面的代码。 (http://jqueryui.com/slider/)

我有一个函数应该测试两个值,并根据两个值之间的差异重新格式化它们(到适当的小数位)。如果差值大于 10,我将解析出整数。如果差值大于 5,则应保留一位小数。其他一切,我将保留两位小数。

当我输入两个相差小于等于 10 的值时,我使用 toFixed() 函数。而且,在 Firebug 中,我看到一个错误:

TypeError: Low.toFixed is not a function
Low = Low.toFixed(2);

我做错了什么简单的事情吗?

这是我的代码:

var Low = $SliderValFrom.val(),
High = $SliderValTo.val();

// THE NUMBER IS VALID
if (isNaN(Low) == false && isNaN(High) == false) {
    Diff = High - Low;
if (Diff > 10) {
      Low = parseInt(Low);  
  High = parseInt(High);    
} else if (Diff > 5) {
       Low = Low.toFixed(1);
       High = High.toFixed(1);
} else {
       Low = Low.toFixed(2);
   High = High.toFixed(2);
}
}

【问题讨论】:

  • 我也有同样的问题。但在当地它的工作。实时显示错误 - TypeError: value.sell_price.toFixed is not a function

标签: javascript


【解决方案1】:

toFixed 不是非数字变量类型的方法。换句话说,LowHigh 无法修复,因为当您在 Javascript 中获取某物的值时,它会自动设置为字符串类型。使用parseFloat()(或带基数的parseInt(),如果它是整数)将允许您将不同的变量类型转换为数字,从而使toFixed() 函数能够工作。

var Low  = parseFloat($SliderValFrom.val()),
    High = parseFloat($SliderValTo.val());

【讨论】:

  • 你忘记了 $ 符号后面的括号和引号,是吗?
  • @AriWais $SliderValFrom是OP使用的变量名,不是函数
  • @jeremy 你是对的,我没有注意原来的帖子......我只是对那些直接寻找解决方案的人说 parseFloat($('slide').val ())
【解决方案2】:

那是因为Low 是一个字符串。

.toFixed() 仅适用于数字。


尝试做:

Low = parseFloat(Low).toFixed(..);

【讨论】:

    【解决方案3】:

    Low 是一个字符串。

    .toFixed() 仅适用于数字。

    解决此类问题的一个简单方法是使用type coercion

    Low = (Low*1).toFixed(..);
    

    乘以 1 强制代码将字符串转换为数字并且不改变值。

    【讨论】:

    • 用 (+Low).toFixed(..) 保存一个字符:P
    【解决方案4】:

    你需要转换成数字类型:

    (+Low).toFixed(2)
    

    【讨论】:

      【解决方案5】:

      parseFloat() 会为空字符串返回NaN,为什么不使用Number() 函数呢?

      可以使用Number()函数将其他类型的值转换为数字。

      parseFloat('').toFixed(2) // "NaN"
      Number('').toFixed(2) // "0.00"
      

      https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number

      【讨论】:

        【解决方案6】:

        在函数中,使用 as

        render: function (args) {
            if (args.value != 0)
                return (parseFloat(args.value).toFixed(2));
        
        
        },
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-06-23
          • 1970-01-01
          • 2020-10-20
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-07-06
          相关资源
          最近更新 更多