如何检查数字是否适合java中的原始类型?

时间:2011-02-06 19:45:18

标签: java integer


我需要做一些输入验证,但遇到一个问题,我似乎没有找到答案(即使使用谷歌)。问题很简单:我在输入上有2个正整数,我需要检查它们的产品是否适合Java中的int类型。
我的一个尝试是将产品与Integer.MAX_VALUE进行比较,但看起来如果产品对于整数来说太大,则值变为负值。 我想通过改变标志来说产品太大了,但看起来如果产品“太大了”它会再次变为正面。
有人可以告诉我如何检测数字是否变得太大? 非常感谢提前!

4 个答案:

答案 0 :(得分:3)

如果您正在使用UI,那么您可能并不特别着急。因此,您可以使用BigInteger,然后针对MAX_VALUE测试产品。

答案 1 :(得分:2)

将值转换为int并查看值是否相同。一个简单的检查看起来像

double d =
long l =
BigInteger bi = 

if (d == (int) d) // can be represented as an int.
if (l == (int) l) // can be represented as an int.

int i = bi.intValue();
if (bi.equals(BigInteger.valueOf(i)))

如果在退回时值相同,则不会丢失信息,您可以使用int值。

答案 2 :(得分:1)

搜索和found the following

  

Java是关于溢出的骑士。没有编译时警告或运行时异常,以便在计算变得太大而无法存储在int或long中时通知您。浮动或双重溢出也没有警告。

/**
 * multiplies the two parameters, throwing a MyOverflowException if the result is not an int.
 * @param a multiplier
 * @param b multiplicand
 * @result product
 */
public static int multSafe(int a, int b) throws MyOverflowException
{
   long result = (long)a * (long)b;
   int desiredhibits = - ((int)( result >>> 31 ) & 1);
   int actualhibits = (int)( result >>> 32 );
   if ( desiredhibits == actualhibits )
   {
      return(int)result;
   }
   else
   {
      throw new MyOverflowException( a + " * " + b + " = " + result );
   }
}

答案 3 :(得分:1)

您可以从输入值创建BigInteger并使用其intValue()方法进行转换。如果BigInteger太大而不适合int,则只返回低位32位。因此,您需要将结果值与输入值进行比较,以确保它不会被截断。