在Java中如何将十进制数转换为36?

sla*_*voj 44 java math decimal

如果我有一个十进制数,如何在Java中将其转换为base 36?

Jer*_*ock 75

给定一个数字i,使用Integer.toString(i, 36).

  • 但它*可能*会改变(因为它的值未指定),然后答案不会是36,所以最好坚持使用普通的旧Integer.toString(i,36) (16认同)
  • 或者使用常量`Integer.toString(i,Character.MAX_RADIX)`我不认为它会很快改变.;) (2认同)

Ric*_*iwi 16

请参阅Integer.toString的文档

http://docs.oracle.com/javase/7/docs/api/java/lang/Integer.html#toString(int,%20int)

toString

public static String toString(int i, int radix)
....
The following ASCII characters are used as digits:

   0123456789abcdefghijklmnopqrstuvwxyz
Run Code Online (Sandbox Code Playgroud)

什么是radix?你很幸运Base 36(这很有意义)
http://docs.oracle.com/javase/7/docs/api/java/lang/Character.html#MAX_RADIX

public static final int     MAX_RADIX   36
Run Code Online (Sandbox Code Playgroud)


hcp*_*asj 14

以下内容适用于任何基础,而不仅仅是36.只需替换字符串内容即可code.

编码:

int num = 586403532;
String code = "0123456789abcdefghijklmnopqrstuvwxyz";
String text = "";
j = (int)Math.ceil(Math.log(num)/Math.log(code.length()));
for(int i = 0; i < j; i++){
    //i goes to log base code.length() of num (using change of base formula)
    text += code.charAt(num%code.length());
    num /= code.length();
}
Run Code Online (Sandbox Code Playgroud)

解码:

String text = "0vn4p9";
String code = "0123456789abcdefghijklmnopqrstuvwxyz";
int num = 0;
j = text.length
for(int i = 0; i < j; i++){
    num += code.indexOf(text.charAt(0))*Math.pow(code.length(), i);
    text = text.substring(1);
}
Run Code Online (Sandbox Code Playgroud)

  • 或许``code`更好的名字是`charset` (4认同)
  • 很抱歉,编码部分完全错误:log(0) 未定义,将会失败。log(1) 产生 0 并且将完全跳过循环。每个 num = code.length^x (例如 36^1、36^2、36^n)都会得到“0” (2认同)

Paŭ*_*ann 9

首先,你必须将你的数字转换为Java的内部数字格式(恰好是基于2的,但这在这里并不重要),例如通过 Integer.parseInt()(如果你的数字是一个小于2 ^ 31的整数).然后,您可以将其转换int为所需的输出格式.该方法Integer.toString(i, 36)通过使用0123456789abcdefghijklmnopqrstuvwxyz数字(小数位0-9和小写英文字母按字母顺序)来完成此操作.如果你想要一些其他的数字,你可以通过替换"数字"(例如toUpperCase)来转换结果,或者自己进行转换 - 这不是魔术,只是一个循环,取其余的模36并除以36(用查找正确的数字).

如果你的数字比int提供的要长,你可能想要使用long(Long或),或者BigInteger相反,它们有类似的基数转换器.

如果你的数字有"点之后的数字",那就更难了,因为如果(幂)Y不是(有限的)基数Y数,那么大多数(有限的)基数X数不能完全表示为X的倍数.