为什么在Javascript中parseFloat(';1/2';)==1

为什么在Javascript中parseFloat(';1/2';)==1,javascript,Javascript,我无法理解这一点: parseFloat('1/2') == 1 Not Expected parseFloat(1/2) == 0.5 Expected parseFloat('0.5') == 0.5 Expected parseFloat(0.5) == 0.5 Expected 这是个问题还是我做错了什么?还有,如何获得 parseFloat('1/2') == 0.5 parseFloat无法将/字符理解为除法,也无法对字符串输入进行eval 当遇到它不理解的字符时,它只是停止查找

我无法理解这一点:

parseFloat('1/2') == 1 Not Expected
parseFloat(1/2) == 0.5 Expected
parseFloat('0.5') == 0.5 Expected
parseFloat(0.5) == 0.5 Expected
这是个问题还是我做错了什么?还有,如何获得

parseFloat('1/2') == 0.5

parseFloat
无法将
/
字符理解为除法,也无法对字符串输入进行
eval

当遇到它不理解的字符时,它只是停止查找,并返回正确解析的第一部分:

console.log(
parseFloat(“1/2”),//1
parseFloat(“3/2”),//3
parseFloat(“1kahsdjfjhksd2”)//1
)
如文件所述

parseFloat解析其参数,并返回一个浮点数。如果遇到符号(+或-)、数字(0-9)、小数点或指数以外的字符,则返回该点之前的值,并忽略该字符和所有后续字符。允许使用前导空格和尾随空格

因此
1/2
被视为字符串。它只解析
1
。忽视了休息

可以使用来计算分数形式


console.log(eval('2/3'))
解析将转换为1的字符串。如果您的字符串仅为数字(例如“0.5”),则它们将被正确转换,但由于它包含“/”,因此不会发生自动类型转换,并且将保持为字符串。使用数字时,会出现预期行为,即:

parseFloat(1/2) === 0.5 // true

不是100%肯定。但是,如果您稍微使用parseFloat,您将看到它尝试将找到的每个数字转换为浮点,但一旦出现意外值,它就会停止,因此:

parseFloat('1/asdf') == 1
但是


所以parse float不会为您计算,只会解析它找到的每个数字,直到有非数字的东西。

'1/2'
是一个字符串
parse float
不是
eval
1/2
不是一个浮点,它是一个数学运算。这是真的,但是,如果您已经在处理数字,那么根本没有理由调用
parseFloat()
。事实上,这样做会先将数字转换为字符串,然后再转换回来。同意,但如果我想将多项式用作字符串,这是不可能的。@shubhanduvaid您需要先使用
eval()
,然后才能使用。同意,但如果我想将多项式用作字符串,这是不可能的。您可以使用
eval(“1/2”)
,但你应该研究一下,自己决定是否值得。
parseFloat('0.5') == 0.5