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

时间:2018-04-18 12:52:54

标签: 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

4 个答案:

答案 0 :(得分:10)

正如在文档中提到的parseFloat

  

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

所以1/2被视为字符串。它只解析1。而忽略了休息。

您可以使用eval来计算小数形式。

console.log(eval('2/3'))

答案 1 :(得分:6)

parseFloat不会将/字符理解为分区,也不会对字符串输入执行eval

它只是在遇到它不理解的角色时停止查看并返回正确解析的第一部分:

console.log(
  parseFloat("1/2"), // 1
  parseFloat("3/2"), // 3
  parseFloat("1kahsdjfjhksd2") // 1
)

如果您确实要将字符串"1/2"评估为数字0.5,则可以使用eval。请注意,因为使用eval可以是security risk, slow and hard to debug

console.log(
  eval("1/2")
);

答案 2 :(得分:1)

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

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

答案 3 :(得分:1)

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

parseFloat('1/asdf') == 1

parseFloat('0.5') == 0.5

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