当前位置: 首页 > 面试题库 >

如何添加两个java.lang.Numbers?

尚宏硕
2023-03-14
问题内容

我有两个数字。例如:

Number a = 2;
Number b = 3;
//Following is an error:
Number c = a + b;

为什么数字不支持算术运算?无论如何,我将如何在Java中将这两个数字相加?(当然,我是从某个地方获取它们的,我不知道它们是Integer还是float等)。


问题答案:

你不知道数字是整数还是浮点数…使用Number该类时,编译器也不知道你的数字是整数,浮点数还是其他东西。结果,像+和-这样的基本数学运算符不起作用;计算机将不知道如何处理这些值。

开始编辑

根据讨论,我认为一个示例可能会有所帮助。计算机将浮点数存储为两个部分,即系数和指数。所以,在理论体系,001110可能会被分解为0011 10,或3 2 = 9,但正整数存储号码为二进制,所以能001110也意味着2 + 4 + 8 = 14,当你使用类Number,你告诉计算机你不知道数字是浮点数还是整数或什么,所以它知道它具有001110,但不知道这是9还是14或其他值。

结束编辑

你可以做一些假设,然后转换为一种数学类型。所以你可以

Number c = a.intValue() + b.intValue();

你可能会变成

Integer c = a.intValue() + b.intValue();

如果你愿意舍入一些舍入错误,或者

Float c = a.floatValue() + b.floatValue();

如果你怀疑自己没有处理整数,并且可以解决较小的精度问题。或者,如果你希望对性能造成小的影响而不是该错误,

BigDecimal c = new BigDecimal(a.floatValue()).add(new BigDecimal(b.floatValue()));


 类似资料:
  • 我想计算应用程序内的端口号。像这样的属性: 但当我启动Spring Boot应用程序时,我得到的只是一个执行选项。 参考指南的数学运算符部分建议它应该工作,但事实并非如此。 在Spring内部,它甚至可以调用: 但这里面没有逻辑来识别这是SpEL。就好像它根本没认出是斯佩尔。但是,如果我将表达式更改为#{n1${myapp.web.server.port.ssl}},则会出现以下异常,表明它被评估

  • 问题:给您两个非空链表,表示两个非负整数。数字按相反顺序存储,每个节点包含一个数字。将这两个数字相加,并将其作为链表返回。您可以假设这两个数字不包含任何前导零,除了0本身** 示例:工作测试用例如下:-输入:(2)- 我的解决方案不适用于以下测试用例: 输入: 单链表的定义: 这就是我的解决办法

  • 问题内容: 这是我正在使用的代码。 我将单独的main方法与此代码一起调用上述方法: 有没有一种方法可以轻松在输出之间添加空格?这是当前的样子: 问题答案: 添加文字空间或制表符:

  • 下面的代码是一个按钮的方法。 它总是给我一个错误。 如果我删除,那么它可以正常工作。 当我单击按钮时,如何使用POST方法,并移动到另一个活动? 错误:04-27 19:41:26.066 197 4-1974/com.opshun_test.opshun_test e/androidruntime:致命异常:main process:com.opshun_test.opshun_test,pid

  • 问题内容: 我有两个桌子:玩具和游戏。 一个小孩可以有多个玩具。一个小孩可以一次参加多个游戏。 我想要一个查询,该查询将为我提供little_kid涉及的玩具和游戏的总数。 基本上,我想要这两个查询的总和: 是否可以在单个SQL查询中获得它?显然,我可以通过编程的方式对它们进行汇总,但这并不是很理想。 (我意识到人为的例子使模式看起来效率低下。让我们假设我们无法更改模式。) 问题答案: 包装它们并