【问题标题】:Second argument to parseFloat in JavaScript?JavaScript中parseFloat的第二个参数?
【发布时间】:2012-01-23 05:56:58
【问题描述】:

在这个字体大小调整教程中:

Quick and easy font resizing

作者使用带有第二个参数的 parseFloat,我在这里读到:

parseFloat() w/two args

应该指定提供的数字作为字符串的基数,以便您可以将其输入“0x10”并通过将 16 作为第二个参数将其识别为十六进制。

问题是,我测试过的浏览器似乎都没有这样做。

这些人是否对 Java 感到困惑?

【问题讨论】:

    标签: javascript hex base parsefloat


    【解决方案1】:

    不,他们对parseInt() 感到困惑,它可以采用基数参数。另一方面,parseFloat() 只接受小数。这可能只是为了保持一致性,因为您应该始终将基数参数传递给parseInt(),因为它可以将010 之类的数字视为八进制,给出8 而不是正确的10

    Here's the reference for parseFloat(),对比parseInt()

    【讨论】:

      【解决方案2】:

      这是 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

      【讨论】:

        【解决方案3】:

        parseFloat 可以接受十进制以外的数字。

        console.log(parseFloat(010)) // 8

        【讨论】:

        • 这实际上并不是 parseFloat 做任何有趣的事情。这是因为 javascript 中的一些数字格式,我实际上并不熟悉:01 == 1010 == 80100 == 64021 == 17。因此,当有前导 0 时,显然使用八进制表示法:developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/…
        猜你喜欢
        • 2013-07-06
        • 2018-11-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-03-22
        • 2018-06-26
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多