109

我正在使用 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);
}
}
4

6 回答 6

197

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

var Low  = parseFloat($SliderValFrom.val()),
    High = parseFloat($SliderValTo.val());
于 2012-12-27T18:13:53.500 回答
103

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

.toFixed()仅适用于数字。


尝试做:

Low = parseFloat(Low).toFixed(..);
于 2012-12-27T18:13:52.233 回答
28

Low是一个字符串。

.toFixed()仅适用于数字。

克服此类问题的一种简单方法是使用类型强制

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

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

于 2016-11-22T20:47:47.997 回答
5

您需要转换为数字类型:

(+Low).toFixed(2)
于 2019-10-29T08:55:47.157 回答
2

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

于 2021-06-01T19:56:26.937 回答
0

在函数中,用作

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


},
于 2019-01-15T19:22:26.207 回答