与toString相反(36)?

时间:2014-01-08 02:37:17

标签: javascript numbers type-conversion

var a = (123.456).toString(36) //"3f.gez4w97ry0a18ymf6qadcxr"

现在,如何使用该字符串恢复原始数字?

注意:parseInt(number,36)仅适用于整数。

1 个答案:

答案 0 :(得分:10)

您可以尝试使用parseInt分别解析整数和浮动部分,因为parseFloat不支持基数:

function parseFloatInBase(n, radix) {
    var nums = n.split(".")

    // get the part before the decimal point
    var iPart = parseInt(nums[0], radix)
    // get the part after the decimal point
    var fPart = parseInt(nums[1], radix) / Math.pow(radix, nums[1].length)

    return iPart + fPart
}

// this will log 123.456:
console.log(parseFloatInBase("3f.gez4w97ry0a18ymf6qadcxr", 36))

我除以radix ^ numLength因为我基本上将小数点移到numLength个空格上。您可以像在数学课中那样执行此操作,因为您知道除以10会在一个空格上移动小数,因为大多数数学都在基数10中。示例:

123456 / 10 / 10 / 10 = 123.456

这相当于

123456 / (10 * 10 * 10) = 123.456

因此

123456 / (10 ^ 3) = 123.456