如何在Javascript中将十进制(以10为基数)转换为小数(即以3/2为基数)

如何在Javascript中将十进制(以10为基数)转换为小数(即以3/2为基数),javascript,decimal,counting,base,base-conversion,Javascript,Decimal,Counting,Base,Base Conversion,我已经找到了很多关于基本转换算法和使用内置Javascript函数将十进制转换为二进制或十六进制的资源,但是我找不到任何关于如何转换为任何小数的资源,例如基本3/2。五进制数系统非常有趣,我希望能够使用它,但我找不到任何方法将其从十进制转换为十进制 等级制度如下:1、2、20、21、22、210、211、212、2100、2101等 我找不到任何可靠的方法来转换它。以下是我目前掌握的代码: 函数分贝(数字、基数){ 设digitArray=[]; let商; 让剩余的; for(设i=0;i

我已经找到了很多关于基本转换算法和使用内置Javascript函数将十进制转换为二进制或十六进制的资源,但是我找不到任何关于如何转换为任何小数的资源,例如基本3/2。五进制数系统非常有趣,我希望能够使用它,但我找不到任何方法将其从十进制转换为十进制

等级制度如下:1、2、20、21、22、210、211、212、2100、2101等

我找不到任何可靠的方法来转换它。以下是我目前掌握的代码:

函数分贝(数字、基数){
设digitArray=[];
let商;
让剩余的;
for(设i=0;i<16;i++){
商=数学楼层(数字/基数);
余数=基数的百分比;
数字阵列。取消移位(剩余);
数=商;
如果(商==0){
打破
}
}
console.log(数字阵列)
}
它适用于10以下的整基,但如果我输入3/2这样的分数基,那么我会得到一个带小数的结果:

[1,0.5,1,0]//应该是什么时候:[2,1,0]

非常感谢您的帮助。

使用以下资源

…建议的解决方案是


BaseHi:
巴塞洛:
值:



结果:

检查: 函数decimalToBase(数字、基数、基数){ 让数字阵列=[] 数字阵列[0]=数字; 设i=0; while(digitArray[i]&&baseDen如果(baseHi对于
3/2
特定案例,詹姆斯·普罗普(James Propp)揭示了西蒙·诺顿(Simon Norton)在结尾注释中描述的几种方法:

这是基于这样一个事实,当n被写成3k+r,其中余数r是0、1或2时,n的二次表示等于2k的二次表示,数字r加在末尾。这为我们提供了一种快速的方法,通过重复除以b的过程,从右到左写出n的二次表示y三,四舍五入,加倍

他们还提供了一些Mathematica代码来运行它

S[n_]:=If[n<3,{n},追加[S[2层[n/3]],Mod[n,3]]
我真的不懂Mathematica,所以我不能用js一对一地重写它,但如果我正确理解了算法,那会是这样的:

const decimaltosesquinal=(n)=>{
常数res=[];
while(n){
常数k=数学层(n/3);
res.push(n%3);
n=k*2;
}
return res.reverse().join(“”);
};
console.log(十进制(6))//应为“210”
console.log(十进制(7))//应为“211”
console.log(十进制(8))//应为“212”

console.log(十进制(100))//应为“212001201”
首先,你不能将
%
用于非整数基。@ChrisG我该用什么来代替呢?@ChrisG我不明白为什么会有这样的问题……通常在
n
的数字基系统中,数字范围从
0…n-1
。例如,base
4
有数字
0、1、2和3
。似乎建议的基数的五分制
3/2
允许数字
2
?是什么逻辑使得基数
3/2
允许数字
0、1和2
?@JonTrent这实际上是一个常见的误解。你会被引导相信基数的值是符号的数量,但这实际上只是一枚硬币偶然性。否则分数基数是不可能的,但它们在数学上和整数基数一样合理。据我所知,符号的数量是分子的值(在整数基数中,分子只是基数的值),因为拥有3/2的数字是不可能的。