Javascript Number.toString(radix)行为

时间:2015-02-11 22:31:18

标签: javascript numbers radix

为什么(73).toString(36)会返回21(0.73).toString(36)会返回0.qa2voha2volfpsnhmyhqia4i而非0.21?

4 个答案:

答案 0 :(得分:3)

因为浮点数存储为二进制分数(数字除以2的幂),73/100不能表示为二进制的非重复分数。因此,在内部,它将值 close 存储到0.73但不完全相等。这就是为什么你在toString()方法中得到这么多数字的原因。

73/100也不能表示为基数36中的非重复分数。通常,对于分数a / b,您只能获得给定基数小数点后的固定位数x如果你可以将a / b减少到某些整数c和n的形式c /(x ^ n)。

答案 1 :(得分:2)

73 = 2 x 36 + 1
0.73 = 26/36 + 10/(36 * 36) + ...

与十六进制一样,我们0, ..., 9, a, b, c, d, e, f f是第16个数字,在36个基础系统中,0, 1, ..., 9, ..., q, ..., z qa第26个数字digit第10个0.21

此问题的原因在于,36个基座中的36比36个基座中的2110倍,而不是{{1}}次。

答案 2 :(得分:1)

36个碱基的数字将有36个数字:从0到z。

基数10中的73 =基数36中的21,因为1 + 2 * 36 = 73

浮点数不会以这种方式计算。 (0.5).toString(2)不是0.101,而是0.1。计算转换为任何基数的0.73将返回一个从0到1的正好73%的数字。

答案 3 :(得分:0)

number =>字母

let childs = [];
for (let i = 10; i < 36; i++) {
    childs.push(
        i.toString(36)
    );
}

// 26

childs;

// (26) ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"]