尝试这个:
new BigDecimal("12345678901234567890123456789012345678901234567890").toString(2);
编辑:
原则上,不同数量系统之间的转换是重复的“除法,余数,乘法,加法”运算.我们来看一个例子:
我们想将123从十进制转换为基数为3的数字.我们做什么?
>取余数模3 – 将这个数字加到结果前面.
>除以3.
>如果数字大于0,请在步骤1继续该数字
所以它看起来像这样:
> 123%3 == 0. ==>最后一位是0.
> 123/3 == 41.
> 41%3 == 2 ==>第二个数字是2.
> 41/3 == 13
> 13%3 == 1 ==>第三个数字是1.
> 13/3 == 4
> 4%3 == 1 ==>第四位数字再次为1.
> 4/3 == 1
> 1%3 == 1 ==>第五位是1.
所以,我们有11120作为结果.
问题是,为此您需要以十进制格式进行某种除法,如果您没有以基于十进制的格式实现数字,通常情况并非如此(就像我在答案中所做的那样)上面提到的最后一个问题)
但它适用于从内部数字格式转换为任何外部格式.
那么,让我们看看我们如何进行逆向计算,从11120(基数3)到其十进制等值. (Base 3在这里是任意基数的占位符,Base 10是内部基数的占位符.)原则上,这个数字可以写成:
1 * 3^4 + 1 * 3^3 + 1*3^2 + 2*3^1 + 0*3^0
一个更好的方法(更快地计算)是这样的:
((((1 * 3) + 1 )*3 + 1 )*3 + 2)*3 + 0
1
3
4
12
13
39
41
123
123
(这被称为Horner方案,通常用于计算多项式的值.)
如果您知道如何在目标系统中表示输入基数(和数字),则可以在要实现的数字方案中实现此目的.
(I just added对我的DecimalBigInt类进行了这样的计算,但您可能希望直接在内部数据结构中进行计算,而不是为每个要输入的十进制数字创建BigNumber类的新对象(甚至两个).)