我编写了一个系统,能够将任何基数(2-36)转换为另一个整数基数,它可以将任何实数从基数 10 转换为任何其他基数(2-36)。
我的问题是将有理数/无理数从 10 以外的任何基数转换为另一个基数。
我使用以下算法进行小数点右侧的转换:
1) 取输入中小数点 (0.xxxxxx--->) 的右侧,并将其乘以要转换为的基数。
2)取大于一的数(点的左边),加到转换后的数的右边。
3)取乘积的右侧,在下一次重复中使用它作为乘数(它乘以基数)
4)重复直到满意或留下一个整数(右侧为0)。
这非常适合将任何浮点数从十进制转换为另一个基数,但显然您不能从非十进制的基数转换。
因此,我尝试将小数点右侧的初始值转换为以 10 为底,执行数学部分,然后在将其添加到输出值时将其转换回原始基数(之前已转换为新基数正在添加)。
不幸的是,这会返回小数点右侧的错误结果。因此,如果从不是以 10 为基数的基数转换,我的答案在左侧总是正确的,但在右侧是不正确的。
有没有人对如何使这项工作有任何想法?或者也许它不会?
编辑
或者,任何人都可以链接我/告诉我如何将有理的十六进制值转换为十进制吗?仅此一项就足以让我解决这个问题。
解决方案
对于将来阅读此问题的其他任何人,我发现了一个相当简单的解决此问题的方法。
您所要做的就是取小数点右侧的数字(无论它可能是什么基数)并将其转换为十进制(您可以在此处查看如何转换整数)。然后取该数字并除以其中的最大位值。例如:
A.C
C == 12 (dec)
12 / 16 = .75 (this is the fractional value in decimal)
然后,您可以获取该小数并通过我上面讨论的算法运行它。
感谢大家在这个问题上的帮助!