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

java数字超过long.max_value-如何检测?

虞修平
2023-03-14

我在检测两个数的和/乘是否超过长整数的最大值时遇到了问题。
示例代码:

long a = 2 * Long.MAX_VALUE;
System.out.println("long.max * smth > long.max... or is it? a=" + a);
/**
 * @param a : one of the two numbers added/multiplied
 * @param b : the other of the two numbers
 * @param c : the result of the addition/multiplication
 * @return the minimum or maximum value of a long integer if addition/multiplication of a and b is less than Long.MIN_VALUE or more than Long.MAX_VALUE
 */
public static long limitLong(long a, long b, long c)
{
    return (((a > 0) && (b > 0) && (c <= 0))
        ? Long.MAX_VALUE
        : (((a < 0) && (b < 0) && (c >= 0)) ? Long.MIN_VALUE : c));
}

如果你认为这不对就告诉我。

共有1个答案

高恺
2023-03-14

如果您不能确定结果将小于9万亿兆,我会使用doublebiginteger获取错误对您没有太大帮助,因为您仍然需要知道如何处理。

更好的做法是,首先验证输入以确保它们在范围内,如果结果的范围大于long,则使用可以处理此问题的类型,从而避免出现错误。

使用BigInteger可以

BigInteger a = BigInteger.valueOf(2).multiply(BigInteger.valueOf(Long.MAX_VALUE));
long l = a.longValue();
if (a.compareTo(BigInteger.valueOf(l)) == 0) {
    // ok
} else {
    // error
}
double d = 2.0 * Long.MAX_VALUE;
long l = (long) Math.max(Long.MIN_VALUE, Math.min(Long.MAX_VALUE, d));
// or as a helper method.
long l = boundedCast(d);

注意:使用double而不是long可能会导致精度损失。

我宁愿避免首先需要错误块。

 类似资料:
  • 我写了一个小聊天和消息对象像 发送到服务器,服务器将其传播给所有注册用户。我想加密message对象看起来像的plaintextmessage部分 我已经在服务器和客户端上构建了我的RSA密钥对。 然后我将服务器公钥编码为字节数组,将此数组编码为Base64编码的字符串,并将其发送给客户端。 客户端和服务器都实现了这些功能 当我试图在客户端加密一条消息,将其发送到服务器并在那里解密时,我得到了错误

  • 问题内容: 我想检查两个日期是否超过一周,例如,检查两个日期是否有7天, 此时,数据范围应仅在一周之内(7天)。 我已经尝试过这样的事情, 有人可以帮忙吗? 问题答案: 最简单的方法是使用Jodatime并使用 另一个解决方案是使用日历,添加7天,然后再次进行比较。

  • 问题内容: 如何获得比Long.MAX_VALUE大的整数? 我希望此方法返回: 问题答案: 该方法无法返回。这是该 点 的。如果它的名字是… false,那 真是 令人困惑。然后应该只调用它,并且合理地使用零个字。只需使用Android的isUserAGoat,您就可以滚动自己的始终返回的函数。 请注意,内存中的字节数固定。 从Oracle: long:long数据类型是64位带符号的二进制补码

  • 我刚开始学习抽象类。 我在一些代码测试中遇到了这个抽象的类问题。我已经被对象是如何启动的难倒了。 在抽象类中可以看到,它的构造函数只持有两个参数--和 其中一个要求是创建类。然而,正如在main(由问题提供)中所看到的,对象由启动,其中缺少和seats值。 我试图编写我的货车类,但是,我无法绕过和的参数,而不改变主类中给定的上下文。我试图在谷歌上搜索更多信息,但找不到任何答案。 有人能好心开导我一

  • 问题内容: 在解析字符串之前,如何检查字符串是否为数字? java 字符串 数字 问题答案: 使用及更高版本:或。 使用Apache Commons Lang 3.4及以下版本:或。 你还可以使用返回true空字符串,并忽略字符串中的内部空格。另一种方法是使用根据Java基本检查数字是否可解析的方法。(链接的javadocs包含每种方法的详细示例。)

  • 在解析字符串之前,如何检查字符串是否为数字?