函数传递参数

时间:2015-04-03 14:47:31

标签: javascript

这是一个小型JavaScript。我从这个功能中得到了意想不到的结果。 020 * 2给出32而不是40.有谁知道如何解决这个问题?

function myFunction(a, b) {
  return a * b;
}

document.write('04 * 03 = ');
document.write(myFunction(04, 03)); //Result 12, correct
document.write('  <<  Correct <br/>020 * 02 = ');
document.write(myFunction(020, 02)); //Result 32, wrong - expected result 40
document.write('  <<  Expected 40 here');

2 个答案:

答案 0 :(得分:6)

  • 020 octal =&gt; 16十进制
  • 02 octal =&gt; 2十进制

16 * 2 = 32。


实施例

将八进制值转换为基数8(八进制)字符串,然后在基数10(十进制)中解析它。

&#13;
&#13;
var x = 020;                                                  // 16 (octal)
var y = 02;                                                   // 2  (octal)

document.body.innerHTML = x + ' x ' + y + ' = ' + x * y;      // 32

document.body.innerHTML += '<br />';                          // {Separator}

var x2 = parseInt(x.toString(8), 10);                         // 20 (decimal)
var y2 = parseInt(y.toString(8), 10);                         // 2  (decimal)

document.body.innerHTML += x2 + ' x ' + y2 + ' = ' + x2 * y2; // 40
&#13;
&#13;
&#13;

答案 1 :(得分:0)

如评论中所述,在数字前面加零会将其类型从十进制(1 - 10)更改为八进制(1 - 8)。要保持数字十进制,请删除前导零。

以下是您提供此建议的代码:

function myFunction(a, b) {
    return a * b;
}

document.write('04 * 03 = ');
document.write(myFunction(4, 3));     //Result 12, correct
document.write('  <<  Correct <br/>20 * 2 = ');
document.write(myFunction(20, 2));     //Result 40, correct
document.write('  <<  Correct ')

myFunction(04, 03)正常工作的原因是因为它在八个位置没有数字。另一方面,20 * 022中的八个点中有一个20,当它乘以八进制02时,被解释为8倍或16倍。