一尘不染

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

java

我有两个数字。例如:

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

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


阅读 316

收藏
2020-03-15

共1个答案

一尘不染

你不知道数字是整数还是浮点数…使用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()));
2020-03-15