JavaScript - 防止八进制转换
JavaScript - Preventing octal conversion
我将数字输入作为参数,只是想考虑前导零。但似乎 javascript 在我可以对数字进行任何操作之前将数字转换为八进制。到目前为止,解决它的唯一方法是,如果我最初将数字作为字符串传递,但我希望在它传递后有另一种方法来转换它?到目前为止尝试过(使用 017
提醒我八进制行为):
017.toString(10) // 15
parseInt(017,10) // 15
017 + "" //15
new Number(017) //15
new Number('017') //17
parseInt('017', 10) // 17
如此给出
function(numb) {
if (typeof numb === number) {
// remove leading zeroes and convert to decimal
}
else {
// use parseInt
}
}
'use strict' 似乎也没有像一些较旧的帖子所建议的那样解决这个问题。有什么想法吗?
- 如果你取"numerical input",你应该总是绝对保证有一个字符串。在这个上下文中没有我知道returns一个
Number
的输入法。由于您收到一个字符串,因此 parseInt(.., 10)
总是足够的。 017
仅当在源代码中按字面意义编写时(或缺少 parseInt
的基数参数时)才被解释为八进制。
如果出于某种奇怪的原因,你最终将十进制解释为八进制,并且你想将该值反向转换回十进制,这很简单:用八进制表示该值,然后重新- 将其解释为十进制:
var oct = 017; // 15
parseInt(oct.toString(8), 10) // 17
虽然因为您可能不知道输入最初是否被解释为八进制,所以这不是您应该做的事情。
JavaScript 将所有以 0 开头并包含所有八进制数字的数字解释为八进制 - 例如 017 将是八进制,但 019 则不是。如果您希望您的数字为小数,则
1.省略前导0。
2. 继续使用 parseInt()。
原因是 JavaScript 使用了一些隐式转换,它根据数字选择最可能的情况。在 JavaScript 中决定前导 0 表示数字是八进制。如果您需要前导 0,那么您必须接受该规则并使用 parseInt()。
如果您在脚本中手动输入数字,则不要使用前导零(如果数字是有效的八进制,则隐含地将其视为八进制 - 如果不是,则将其视为十进制)。如果您将数字作为字符串,则只需使用 +
运算符转换为(十进制)数字。
console.log(+"017")
if (021 < 019) console.log('Paradox');
严格模式不允许使用零前缀
'use strict'
if (021 < 019) console.log('Paradox');
我将数字输入作为参数,只是想考虑前导零。但似乎 javascript 在我可以对数字进行任何操作之前将数字转换为八进制。到目前为止,解决它的唯一方法是,如果我最初将数字作为字符串传递,但我希望在它传递后有另一种方法来转换它?到目前为止尝试过(使用 017
提醒我八进制行为):
017.toString(10) // 15
parseInt(017,10) // 15
017 + "" //15
new Number(017) //15
new Number('017') //17
parseInt('017', 10) // 17
如此给出
function(numb) {
if (typeof numb === number) {
// remove leading zeroes and convert to decimal
}
else {
// use parseInt
}
}
'use strict' 似乎也没有像一些较旧的帖子所建议的那样解决这个问题。有什么想法吗?
- 如果你取"numerical input",你应该总是绝对保证有一个字符串。在这个上下文中没有我知道returns一个
Number
的输入法。由于您收到一个字符串,因此parseInt(.., 10)
总是足够的。017
仅当在源代码中按字面意义编写时(或缺少parseInt
的基数参数时)才被解释为八进制。 如果出于某种奇怪的原因,你最终将十进制解释为八进制,并且你想将该值反向转换回十进制,这很简单:用八进制表示该值,然后重新- 将其解释为十进制:
var oct = 017; // 15 parseInt(oct.toString(8), 10) // 17
虽然因为您可能不知道输入最初是否被解释为八进制,所以这不是您应该做的事情。
JavaScript 将所有以 0 开头并包含所有八进制数字的数字解释为八进制 - 例如 017 将是八进制,但 019 则不是。如果您希望您的数字为小数,则
1.省略前导0。
2. 继续使用 parseInt()。
原因是 JavaScript 使用了一些隐式转换,它根据数字选择最可能的情况。在 JavaScript 中决定前导 0 表示数字是八进制。如果您需要前导 0,那么您必须接受该规则并使用 parseInt()。
如果您在脚本中手动输入数字,则不要使用前导零(如果数字是有效的八进制,则隐含地将其视为八进制 - 如果不是,则将其视为十进制)。如果您将数字作为字符串,则只需使用 +
运算符转换为(十进制)数字。
console.log(+"017")
if (021 < 019) console.log('Paradox');
严格模式不允许使用零前缀
'use strict'
if (021 < 019) console.log('Paradox');