我还是Java的新手,我不得不让事情变得更有趣的想法之一就是尝试创建一种将数字转换为字母的算法(1000 = 1k // 1.000.000 = 1M // 1E + 15 = 1aa ..它将是手机游戏的优化程序),但事实证明,即使双精度型变量也比我要使用的数字(即9.48E + 3048)有一个很小的限制。
关于如何解决此问题的任何想法?
答案 0 :(得分:3)
import java.math.BigInteger;
...
BigInteger myint = new BigInteger("5");
myint = myint.add(new BigInteger("7")); // 12
BigInteger是不可变的(它们不能更改),因此过程仅是对.add,.multiply等进行获取新数字,然后如上所述覆盖变量。他们将拥有任意数量的数字。可以找到其他所有功能here。
您将要避免将整数转换为字符串,因为对于太大的数字而言,它将太慢。制定一种自定义方法,将最高有效的二进制数字转换为所需的字符串(1k,1M,1aa等)。
一种替代方法是,以(尾数,exp)格式保留两个双精度字,就像内部的double一样。每次操作后,将尾数的指数移动到exp = this.getExponent()
,mantissa = this.getMantissa()
的指数变量中。 getExponent
可以返回类似floor(log(mantissa)) + exp
的内容,而getMantissa
可以返回mantissa / nextLowerPowerOfTen(mantissa)
。这将为您提供10 ^(10 ^ 3048),尾数精度为15位,指数精度为15位。