我编写了一个 Java 程序,该程序应该将小数从 1 到 256 转换为十六进制,但是当我尝试使用大于 256 的小数时问题就来了,之后我开始得到不正确的结果。 这是我的代码:
public class Conversion {
public static void main(String[] args) {
System.out.printf("%s%14s", "Decimal", "Hexadecimal");
for(int i = 1; i <= 300; i++) {
System.out.printf("%7d ", i);
decimalToHex(i);
System.out.println();
}
}
private static void decimalToHex(int decimal) {
int count;
if(decimal >= 256) {
count = 2;
} else {
count = 1;
}
for (int i = 1; i <= count; i++) {
if(decimal >= 256) {
returnHex(decimal / 256);
decimal %= 256;
}
if(decimal >= 16) {
returnHex(decimal / 16);
decimal %= 16;
}
returnHex(decimal);
decimal /= 16;
}
}
private static void returnHex(int number) {
switch(number) {
case 15:
System.out.print("F");
break;
case 14:
System.out.print("E");
break;
case 13:
System.out.print("D");
break;
case 12:
System.out.print("C");
break;
case 11:
System.out.print("B");
break;
case 10:
System.out.print("A");
break;
default:
System.out.printf("%d", number);
break;
}
}
}
这是我得到的结果样本:
254 FE
255 FF
256 100
257 111
264 199
266 1AA
271 1FF
272 1100
273 1111
注意:我刚刚开始学习 java,所以尽可能保持简单。谢谢
最佳答案
如果 decimal
小于比较值,您只是忘记打印出零值。当显式打印出这些零时,您也不再需要 count
变量:
private static void decimalToHex(int decimal) {
if (decimal >= 256) {
returnHex(decimal / 256);
decimal %= 256;
} else {
System.out.print("0");
}
if (decimal >= 16) {
returnHex(decimal / 16);
decimal %= 16;
} else {
System.out.print("0");
}
returnHex(decimal);
decimal /= 16;
}
当然,这也会改变小值的输出。它打印 000、001、...
关于java - 从十进制转换为十六进制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26737852/