当前位置: 首页 > 知识库问答 >
问题:

带减法和除法运算的十六进制计算器问题

仇睿
2023-03-14

我有一个基于应用程序的计算器,我面临着两个十六进制基数之间的减法问题。如果是一个(大的数字减去一个小的数字),它会给出正确的结果。问题是当操作(小数字减去大数字)例如:(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,零后没有小数。

我如何解决这个代码?

共有1个答案

包承望
2023-03-14
  1. 当您将负整数转换为十六进制字符串时,您将得到数字加上2^32的十六进制表示形式。例如,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);

其他操作也是如此,不仅仅是减法。

java prettyprint-override">String value = Double.toHexString((double)num1 / num2);
t_result.setText(value);

这将给出小数部分。

 类似资料:
  • 如何添加/减去用户输入的十六进制数? 喜欢: I get:TypeError:不支持的操作数类型-:“str”和“str” 我该怎么做?我必须将它们转换为int吗?那么我不能将它们作为十六进制(0xFFFFFF)...? 我唯一能做的就是: 但这要求我输入basehex/sechex作为数字,因为int不会接受其他形式的数字: 谢谢:)

  • 我试过用 如何在php中计算crc16 CRC16函数的C到PHP转换 我在寻找校验和

  • 问题内容: 我想通过对Sequelize进行简单添加来进行更新。 表: 样品: 此查询后 我知道这是一个简单的问题,但我找不到解决方案。 我可以加减哪个运算符?谢谢 问题答案: 这里是 : 要么 您也可以只替换为。 有关更多详细信息:请 阅读

  • 我在熊猫数据框上有一个时间序列,它与月份成一行。我打电话给df1。然后我得到组的月平均值,我把df2称为结果数据帧。现在我想减去每个列的月平均值,而不使用循环。也就是说,需要从df1中“月”==1的所有行中减去df2中的行“月==1”。 在numpy中,我将重塑矩阵,执行操作(由于numpy广播),然后再次重塑矩阵。但我不知道什么是泛张力的方法。尽管我觉得这应该是一个非常简单的方法。 这里有一个例

  • 其想法是通过HTTP实现RFC3091(“Pi数字生成协议”)。我一直很难找到一种流式(和/或插口)算法,它实际上可以产生正确的十进制扩展。 是的,有很多实现,但大多数都需要预先分配缓冲区,缓冲区的大小等于请求的位数。显然,这并不能产生无穷无尽的数字流。 用C/Py/PHP/etc实现是理想的。 谢谢