为什么(73).toString(36)
会返回21
而(0.73).toString(36)
会返回0.qa2voha2volfpsnhmyhqia4i
而非0.21?
答案 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
q
为a
第26个数字和digit
第10个0.21
。
此问题的原因在于,36个基座中的36
比36个基座中的21
小10
倍,而不是{{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)
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"]