为什么parseFloat(027)等于23

时间:2014-01-29 01:05:43

标签: javascript

我在Chrome控制台和IE11中测试过它。

parseFloat(27) => 27
parseFloat('27') => 27
parseFloat('027') => 27

parseFloat(027) => 23
parseFloat(0027) => 23

我猜是将它理解为八进制,但我没有找到任何对here的引用

由于我使用它来保护一个用户输入的数字,我如何确定即使使用前面的0它也会被作为浮点数处理?

4 个答案:

答案 0 :(得分:4)

027”是您在源代码中指定27个八进制的方式。由于您不打算让用户输入您的源代码,因此您无需做任何特别的事情。

答案 1 :(得分:3)

parseFloat不理解八进制:

> parseFloat('027')
27

问题是你要给它一个数字,而不是一个字符串。 027是一个八进制数字文字,其求值为23; parseFloat不知道它看起来像027。只要确保将字符串传递给函数,就不应该有任何八进制问题。

答案 2 :(得分:1)

  

为什么parseFloat(027)等于23

parseFloat()的参数是一个字符串值,因此对任何不是字符串的内容执行强制转换; 0x20027等文字数字首先归一化为十进制。

这意味着parseFloat(027)实际上是parseFloat('23')

  

我怎样才能确定即使使用前面的0,它也会被当作浮动处理?

通过确保传递给parseFloat()的值是一个字符串值,因为前导零在parseFloat()(和parseInt()的基数为10)中没有特殊含义。

答案 3 :(得分:0)

它将输入解释为八进制。见here。如果在“八进制”字段中输入“027”,则会在“十进制”字段中看到“23”输出。