.toFixed 函数不适用于 js-object
.toFixed function doesn't work with js-object
为什么当我想将格式化数字分配给变量时显示错误?
var jsObject = new Object();
jsObject.number = 0;
for (i = 1; i <= 10; i++) {
jsObject.number += 0.1;
console.log((jsObject.number).toFixed(1)); // works and shows right numbers
jsObject.number = (jsObject.number).toFixed(1); // TypeError: jsObject.number.toFixed is not a function
}
因为 .toFixed() 返回一个字符串,所以您要用字符串替换数字。简单的日志记录将向您展示正在发生的事情。
var jsObject = new Object();
jsObject.number = 0;
for(i = 1; i <= 10; i++) {
jsObject.number += 0.1;
console.log(i, "before", jsObject.number, typeof jsObject.number)
jsObject.number = (jsObject.number).toFixed(1);
console.log(i, "after", jsObject.number, typeof jsObject.number)
}
输出将是:
1 before 0.1 number
1 after 0.1 string
2 before 0.10.1 string
"Uncaught TypeError: jsObject.number.toFixed is not a function",
JavaScript 不保留尾随零。因此,如果您需要它们进行输出,最好在输出数字的地方进行。或者唯一的其他选择是在添加之前对其进行 parseFloat Number。
jsObject.number = Number(jsObject.number) + 0.1;
jsObject.number = parseFloat(jsObject.number) + 0.1;
toFixed
returns 字符串和字符串没有 toFixed
方法。像这样更新您的 for
循环以解决该问题。
for (i = 1; i < 10; i++) {
jsObject.number += 0.1;
console.log((jsObject.number).toFixed(1));
jsObject.number = parseFloat((jsObject.number).toFixed(1)); // <--
}
这个方法returns一个字符串。
https://www.geeksforgeeks.org/javascript-tofixed-function/
Return Value: It returns a number in the string representation.
所以第一次成功了,但随后的所有次都失败了,不再是一个数字。
您可以解析为数字,或强制转换为数字(例如使用乘法):
for(i = 1; i <= 10; i++) {
jsObject.number += 0.1;
console.log( (jsObject.number).toFixed(1) ); // works and shows right numbers
jsObject.number = 1 * (jsObject.number).toFixed(1); // TypeError: jsObject.number.toFixed is not a
}
如评论中所述,您正在用它的字符串表示覆盖数字(toFixed
这样做)。所以你必须将你的字符串重新转换成数字格式。正确与否有很多方法,我更喜欢除以1(或乘以)
var jsObject = new Object();
jsObject.number = 0;
for (i = 1; i <= 10; i++) {
jsObject.number += 0.1;
console.log((jsObject.number).toFixed(1)); // works and shows right numbers
jsObject.number = (jsObject.number).toFixed(1) / 1; // TypeError: jsObject.number.toFixed is not a function
}
您需要将从 toFixed()
返回的 string
转换为正确的数据类型。
toFixed()
returns a string
所以在第二次迭代中,它试图调用 string.toFixed()
,它不存在,因为 toFixed()
不是strings
.
var jsObject = new Object();
jsObject.number = 0;
for(i = 1; i <= 10; i++) {
jsObject.number += 0.1;
console.log( jsObject.number.toFixed(1) );
jsObject.number = Number.parseFloat(jsObject.number.toFixed(1));
}
为什么当我想将格式化数字分配给变量时显示错误?
var jsObject = new Object();
jsObject.number = 0;
for (i = 1; i <= 10; i++) {
jsObject.number += 0.1;
console.log((jsObject.number).toFixed(1)); // works and shows right numbers
jsObject.number = (jsObject.number).toFixed(1); // TypeError: jsObject.number.toFixed is not a function
}
因为 .toFixed() 返回一个字符串,所以您要用字符串替换数字。简单的日志记录将向您展示正在发生的事情。
var jsObject = new Object();
jsObject.number = 0;
for(i = 1; i <= 10; i++) {
jsObject.number += 0.1;
console.log(i, "before", jsObject.number, typeof jsObject.number)
jsObject.number = (jsObject.number).toFixed(1);
console.log(i, "after", jsObject.number, typeof jsObject.number)
}
输出将是:
1 before 0.1 number
1 after 0.1 string
2 before 0.10.1 string
"Uncaught TypeError: jsObject.number.toFixed is not a function",
JavaScript 不保留尾随零。因此,如果您需要它们进行输出,最好在输出数字的地方进行。或者唯一的其他选择是在添加之前对其进行 parseFloat Number。
jsObject.number = Number(jsObject.number) + 0.1;
jsObject.number = parseFloat(jsObject.number) + 0.1;
toFixed
returns 字符串和字符串没有 toFixed
方法。像这样更新您的 for
循环以解决该问题。
for (i = 1; i < 10; i++) {
jsObject.number += 0.1;
console.log((jsObject.number).toFixed(1));
jsObject.number = parseFloat((jsObject.number).toFixed(1)); // <--
}
这个方法returns一个字符串。
https://www.geeksforgeeks.org/javascript-tofixed-function/
Return Value: It returns a number in the string representation.
所以第一次成功了,但随后的所有次都失败了,不再是一个数字。
您可以解析为数字,或强制转换为数字(例如使用乘法):
for(i = 1; i <= 10; i++) {
jsObject.number += 0.1;
console.log( (jsObject.number).toFixed(1) ); // works and shows right numbers
jsObject.number = 1 * (jsObject.number).toFixed(1); // TypeError: jsObject.number.toFixed is not a
}
如评论中所述,您正在用它的字符串表示覆盖数字(toFixed
这样做)。所以你必须将你的字符串重新转换成数字格式。正确与否有很多方法,我更喜欢除以1(或乘以)
var jsObject = new Object();
jsObject.number = 0;
for (i = 1; i <= 10; i++) {
jsObject.number += 0.1;
console.log((jsObject.number).toFixed(1)); // works and shows right numbers
jsObject.number = (jsObject.number).toFixed(1) / 1; // TypeError: jsObject.number.toFixed is not a function
}
您需要将从 toFixed()
返回的 string
转换为正确的数据类型。
toFixed()
returns a string
所以在第二次迭代中,它试图调用 string.toFixed()
,它不存在,因为 toFixed()
不是strings
.
var jsObject = new Object();
jsObject.number = 0;
for(i = 1; i <= 10; i++) {
jsObject.number += 0.1;
console.log( jsObject.number.toFixed(1) );
jsObject.number = Number.parseFloat(jsObject.number.toFixed(1));
}