未捕获的类型错误:无法读取未定义的属性“toString”
2014-12-12
32326
为什么我的代码不起作用?
Chrome 向我提供了以下错误:
Uncaught TypeError:无法读取未定义的属性“toString”
。
它适用于 1、2、3、4、6、7、8、9,但不适用于 5、10、15、...
请帮帮我。
这是我的 javascript 代码:
<code><script>
function mmCal(val) {
var a, b, c, d, e, f, g, h, i;
a = val * 25.4;
b = a.toString().split(".")[0];
c = a.toString().split(".")[1];
d = c.toString().substr(0, 1);
e = +b + +1;
f = b;
if (d>5) {
document.getElementById("txtt").value = e;
} else {
document.getElementById("txtt").value = f;
}
}
</script></code>
这是我的 html:
<code><input type="text" id="txt" value="" onchange="mmCal(this.value)"></code>
<code><input type="text" id="txtt" value=""></code>
3个回答
正如 Sebnukem 所说
It doesn't work when a is an integer because there's no period to split your string, and that happens with multiples of 5.
但是您可以使用技巧,因此使用
a % 1 != 0
来知道该值是否为小数,请参阅以下代码:
function mmCal(val) {
var a, b, c, d, e, f, g, h, i;
a = val * 25.4;
if(a % 1 != 0){
b = a.toString().split(".")[0];
c = a.toString().split(".")[1];
}
else{
b = a.toString();
c = a.toString();
}
d = c.toString().substr(0, 1);
e = +b + +1;
f = b;
if (d>5) {
document.getElementById("txtt").value = e;
} else {
document.getElementById("txtt").value = f;
}
}
这可以帮助您。
Wilfredo P
2014-12-12
当
a
为整数时,此方法不起作用,因为没有句点来拆分字符串,而这种情况发生在 5 的倍数上。
sebnukem
2014-12-12
将数字四舍五入为整数的奇怪方法 :-)
您正在将英寸转换为毫米,然后将其四舍五入为整数,对吗?
为什么不对数字使用“toFixed()”?请参阅: Number.prototype.toFixed()
我的意思是:
function mmCal(val) {
var a, rounded;
a = val * 25.4;
rounded = a.toFixed();
document.getElementById("txtt").value = rounded;
}
(您也可以使用“toFixed(0)”来获得明确的精度)。
Ariel
2014-12-12