【发布时间】:2020-12-29 11:12:30
【问题描述】:
我发现很多资源都在谈论基数转换算法和使用内置的 Javascript 函数将十进制转换为二进制或十六进制,但是我找不到任何关于如何转换为任何小数基数的资源,例如 base 3/2 . sequinary 数字系统很有趣,我希望能够使用它,但是我找不到任何方法可以从 Decimal 转换为它。
红片系统如下:1、2、20、21、22、210、211、212、2100、2101等
我找不到任何可靠的方法来转换它。这是我到目前为止的代码:
function decimalToBase(number, base) {
let digitArray = [];
let quotient;
let remainder;
for (let i = 0; i < 16; i++) {
quotient = Math.floor(number / base);
remainder = number % base;
digitArray.unshift(remainder);
number = quotient;
if (quotient == 0){
break;
}
}
console.log(digitArray)
}
它适用于 10 以下的整个基数,但如果我输入像 3/2 这样的小数基数,那么我会得到带小数的结果:
[1, 0.5, 1, 0] // When It should be: [2, 1, 0]
任何帮助将不胜感激。
【问题讨论】:
-
一方面,您不能将
%用于非整数基数。 -
@ChrisG 我会用什么代替?
-
@ChrisG 我不明白为什么这会是个问题
-
嗯...通常在
n的数字基础系统中,数字范围从0...n-1。例如,基数4有数字0, 1, 2, & 3。似乎使用建议的基数3 / 2的 sesquinary 系统,数字2是允许的?!基数3 / 2是允许数字0, 1, & 2的逻辑是什么? -
@JonTrent 这实际上是一个常见的误解。您会被引导相信基数的值是符号的数量,但这实际上只是一个巧合。否则分数基将是不可能的,但它们在数学上与整数基一样可靠。据我所知,符号的数量是分子的值(在整数基数中,分子只是基数的值),因为不可能有 3/2 的数字。
标签: javascript decimal counting base base-conversion