我正在使用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);
}
}
答案 0 :(得分:132)
toFixed
不是非数字变量类型的方法。换句话说,Low
和High
无法修复,因为当您在Javascript中获取某些内容的值时,它会自动设置为字符串类型。使用parseFloat()
(或带基数的parseInt()
(如果它是整数)将允许您将不同的变量类型转换为可使toFixed()
函数起作用的数字。
var Low = parseFloat($SliderValFrom.val()),
High = parseFloat($SliderValTo.val());
答案 1 :(得分:74)
这是因为Low
是一个字符串。
.toFixed()
仅适用于数字。
尝试做:
Low = parseFloat(Low).toFixed(..);
答案 2 :(得分:18)
Low
是一个字符串。
.toFixed()
仅适用于数字。
克服此类问题的一种简单方法是使用type coercion:
Low = (Low*1).toFixed(..);
乘以1强制代码将字符串转换为数字并且不会更改该值。 JSFiddle代码here。
答案 3 :(得分:1)
您需要转换为数字类型:
(+Low).toFixed(2)
答案 4 :(得分:0)
在函数中,用作
render: function (args) {
if (args.value != 0)
return (parseFloat(args.value).toFixed(2));
},
答案 5 :(得分:0)
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