我有一个基于应用程序的计算器,我面临着两个十六进制基数之间的减法问题。如果是一个(大的数字减去一个小的数字),它会给出正确的结果。问题是当操作(小数字减去大数字)例如:(1-22或1a-22)应用程序崩溃并关闭时。
十六进制方法是:
private void hexa_calc() {
int num = 0;
int num1 = Integer.parseInt(e_one.getText().toString().trim(),16);
int num2 =Integer.parseInt(e_two.getText().toString().trim(),16);
if (appKey1.operation.equals("+")) {
String value = Integer.toHexString(num1 + num2);
num = Integer.parseInt(value, 16);
t_result.setText(String.valueOf(Integer.toHexString(num)));
} else if (appKey1.operation.equals("-")) {
String value = Integer.toHexString(num1 - num2);
num = Integer.parseInt(value, 16);
t_result.setText(String.valueOf(Integer.toHexString(num)));
} else if (appKey1.operation.equals("X")) {
String value = Integer.toHexString(num1 * num2);
num = Integer.parseInt(value, 16);
t_result.setText(String.valueOf(Integer.toHexString(num)));
} else {
String value = Integer.toHexString(num1 / num2);
num = Integer.parseInt(value, 16);
t_result.setText(String.valueOf(Integer.toHexString(num)));
}
}
除法运算的第二个问题是它给出了(结果=0),而不是0.12324,零后没有小数。
我如何解决这个代码?
Integer.toHexString(-3)
为您提供fffffffd
。您应该直接将结果字段设置为该值,但您正在尝试将该字符串转换回整数,然后再转换为十六进制字符串。这对额外的、不必要的转换失败了。它失败是因为十六进制数fffffff d
太大,无法用整数表示。它只能放在长的盒子里。所以Integer.parseInt(Integer.toHexString(-3), 16);
失败与java.lang.NumberFormatExcture,但
Long.parseLong(Integer.toHexString(-3), 16);
给你4294967293,也就是2^32-3。
TLDR,您应该避免将结果转换为整数并返回十六进制字符串。将代码简化为
String value = Integer.toHexString(num1 - num2);
t_result.setText(value);
其他操作也是如此,不仅仅是减法。
String value = Double.toHexString((double)num1 / num2);
t_result.setText(value);
这将给出小数部分。