使用Javascript时,操作数上的前导0导致除法结果不同
如果在javascript中除以使用Javascript时,操作数上的前导0导致除法结果不同,javascript,math,Javascript,Math,如果在javascript中除以11/10,则得到1.1。如果在javascript中除以011/10,则得到0.9。是什么导致结果的差异?011是一个等于9的八进制常数 发件人: 整数可以表示为十进制(以10为基数)、十六进制(以16为基数)、和八进制(以8为基数) 整数文本的前导0(零)表示它是八进制的。八进制整数只能包括数字0-7 另请注意: 不推荐使用八进制整数文字,已从ECMA-262第3版标准中删除(在严格模式下) C++也有八进制常数。如果要处理的数字表示为字符串,则可以使用指定将
11/10
,则得到1.1
。如果在javascript中除以011/10
,则得到0.9
。是什么导致结果的差异?011
是一个等于9的八进制常数
发件人:
整数可以表示为十进制(以10为基数)、十六进制(以16为基数)、和八进制(以8为基数)
整数文本的前导0(零)表示它是八进制的。八进制整数只能包括数字0-7
另请注意:
不推荐使用八进制整数文字,已从ECMA-262第3版标准中删除(在严格模式下)
C++也有八进制常数。如果要处理的数字表示为字符串,则可以使用指定将其转换为数字时所需的基数
你能解释这种行为而不仅仅是链接到bug吗。就像发生了什么。为什么加零会把值弄乱..那么结果是因为八进制常数与浮点无关..加上前面的
0
表示八进制数。就像添加0x
表示十六进制数一样。在Java等其他语言中,您甚至可以添加表示二进制数的0b
。这是大多数语言的共同特征。因此,011/10=0.9
是完全正确的。也许一个关于八进制常数的问题确实证明了向下投票的合理性,但我猜向下投票和接近投票是基于一个错误的假设,即这是旧的浮点精度问题。事实并非如此,鉴于前两条评论(现已删除)都无法正确识别问题,我认为这实际上是一个有用的问题。不过,我会更改标题,以便更清楚它是关于什么的。
+'011' // 9
parseInt('011') // 9
parseInt('011', 10) // 11