我有一個應用程式 Base 計算器,但我遇到了兩個基本十六進制之間的減法問題。如果一個(大數減小數)它給出了正確的結果。問題是當操作(小數減大數)例如:(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)));
}
}
除法運算的第二個問題是它給出了 (result = 0 ) 它不像這個 0.12324 零后沒有小數。
我該如何解決此代碼?
uj5u.com熱心網友回復:
- 當您將負整數轉換為十六進制字串時,您會得到數字加上 2^32 的十六進制表示。例如,
Integer.toHexString(-3)給你fffffffd. 您應該直接將結果欄位設定為該值,但您試圖將此字串轉換回整數并再次轉換為十六進制字串。這對額外的和不必要的轉換失敗了。它失敗是因為十六進制數fffffffd太大而無法用整數表示。它只能適合Long。所以,
Integer.parseInt(Integer.toHexString(-3), 16);
因 java.lang.NumberFormatException 而失敗,但是
Long.parseLong(Integer.toHexString(-3), 16);
給你 4294967293,即 2^32 - 3。
TLDR,您應該避免將結果轉換為整數并回傳為十六進制字串。將您的代碼簡化為
String value = Integer.toHexString(num1 - num2);
t_result.setText(value);
其他運算也是如此,而不僅僅是減法。
- 除法的問題是結果的型別是整數。當然,整數結果不能有任何小數部分。您應該使用 double 來保存結果。例如:
String value = Double.toHexString((double)num1 / num2);
t_result.setText(value);
這會給你小數部分。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/382627.html
