【发布时间】:2012-01-23 05:56:58
【问题描述】:
在这个字体大小调整教程中:
作者使用带有第二个参数的 parseFloat,我在这里读到:
应该指定提供的数字作为字符串的基数,以便您可以将其输入“0x10”并通过将 16 作为第二个参数将其识别为十六进制。
问题是,我测试过的浏览器似乎都没有这样做。
这些人是否对 Java 感到困惑?
【问题讨论】:
标签: javascript hex base parsefloat
在这个字体大小调整教程中:
作者使用带有第二个参数的 parseFloat,我在这里读到:
应该指定提供的数字作为字符串的基数,以便您可以将其输入“0x10”并通过将 16 作为第二个参数将其识别为十六进制。
问题是,我测试过的浏览器似乎都没有这样做。
这些人是否对 Java 感到困惑?
【问题讨论】:
标签: javascript hex base parsefloat
不,他们对parseInt() 感到困惑,它可以采用基数参数。另一方面,parseFloat() 只接受小数。这可能只是为了保持一致性,因为您应该始终将基数参数传递给parseInt(),因为它可以将010 之类的数字视为八进制,给出8 而不是正确的10。
【讨论】:
这是 parseFloat 的快速版本,它确实需要一个基数。它不支持科学记数法。给定字符串中数字超出基数时的未定义行为。当小数点后的数字过多时也会表现不佳。
function parseFloatWithRadix(s, r) {
r = (r||10)|0;
const [b,a] = ((s||'0') + '.').split('.');
const l1 = parseInt('1'+(a||''), r).toString(r).length;
return parseInt(b, r) +
parseInt(a||'0', r) / parseInt('1' + Array(l1).join('0'), r);
}
parseFloatWithRadix('10.8', 16) 给出 16.5
要点:https://gist.github.com/Hafthor/0a60f918d50113600d7c67252e68a02d
【讨论】:
parseFloat 可以接受十进制以外的数字。
console.log(parseFloat(010)) // 8
【讨论】:
01 == 1、010 == 8、0100 == 64、021 == 17。因此,当有前导 0 时,显然使用八进制表示法:developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/…