为什么javascript中的parseFloat为我返回字符串类型?

Ton*_* Xu 4 javascript string types numbers parsefloat

我搜索过,发现这个与我的问题有关,但不完全相同,因为我使用的是固定而不是精度. 为什么toPrecision返回一个String?

这是我的代码

var oldv = parseFloat(document.getElementById('total').textContent).toFixed(2);
alert(typeof oldv); // returns string
var testv = parseInt(document.getElementById('total').textContent);
alert(typeof testv); // returns number  
Run Code Online (Sandbox Code Playgroud)

我需要进一步的数学步骤,所以字符串类型搞砸了...为什么?怎么解决?TIA

pal*_*aѕн 7

如文档中所述,toFixed返回

使用定点表示法表示给定数字的字符串

如果您需要将返回的结果用作数字,则可以使用内置对象Number:

var oldv = parseFloat(Math.PI).toFixed(2);

console.log( oldv );
console.log( typeof oldv ); // returns string

var num = Number(oldv);
console.log( num );
console.log( typeof num );  // returns number
Run Code Online (Sandbox Code Playgroud)

  • 这对我来说是令人困惑的行为,`toFixed`应该返回一个`Number`. (2认同)
  • 是的,你认为它会返回一个数字,但不是,你必须使用数字或两次执行parseFloat,如'parseFloat(parseFloat("1738382.274838").toFixed(2))`.我花了一整天时间想出这个 (2认同)

小智 5

Number.prototype.toFixed() 函数应该根据此处找到的文档返回字符串类型。

如果您需要对数字执行进一步的算术,您可以在此处记录的变量名称 (+) 之前使用一元加运算符将其强制返回数字形式,如下所示:

var oldv = parseFloat(document.getElementById('total').textContent).toFixed(2);

alert(typeof oldv); // Returns string

alert(typeof +oldv); // Returns number
Run Code Online (Sandbox Code Playgroud)