开发者问题收集

.toFixed 函数不适用于 js-object

2018-09-10
1516

为什么当我想将格式化的数字分配给变量时会显示错误?

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
}
3个回答

因为 .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 不保留尾随零。因此,如果您需要它们进行输出,最好在输出数字的地方执行它们。或者唯一的其他选择是在添加之前解析浮点数。

jsObject.number = Number(jsObject.number) + 0.1;
jsObject.number = parseFloat(jsObject.number) + 0.1;
epascarello
2018-09-10

tofixed 返回字符串,字符串没有 tofixed 方法。为 这样的循环更新您的 以解决该问题。

187718007
James Long
2018-09-10

此方法返回一个字符串。

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 
} 
Menelaos
2018-09-10