如何检测数字是否大于Long.MAX值

时间:2016-03-22 06:00:40

标签: java numbers

我的应用程序将从最终用户获取数字作为字符串。如果数字不是数字,我必须通过说提供数字来抛出错误消息。我可以通过使用NumberFormatException来解决这个问题。另一种情况是,用户输入的值大于Long.MAX值。我如何检查这种情况并向用户提供错误消息以输入小于Long.MAX值的数字?我不应该使用任何第三方或开源库来解决此问题。即使他们提供解决方案,他们如何解决它?

6 个答案:

答案 0 :(得分:4)

用户Running: rake assets:precompile I, [2016-03-22T05:59:25.096354 #366] INFO -- : Writing /tmp/build_3e31f1bb8b828cb787890706e9ec589b/public/assets/FontAwesome-0d34da07e5cbcb4ff087b397966a9f9ffb4d6ed7c7060568565203c02f3fee11.otf I, [2016-03-22T05:59:25.099701 #366] INFO -- : Writing /tmp/build_3e31f1bb8b828cb787890706e9ec589b/public/assets/fontawesome-webfont-e511891d3e01b0b27aed51a219ced5119e2c3d0460465af8242e9bff4cb61b77.eot解析用户输入并将结果与​​Long.MAX_VALUE进行比较

rake aborted!
       Sass::SyntaxError: Invalid CSS after "...orm-group::not(": expected pseudo_expr, was ":first-child)"
       (sass):9108

答案 1 :(得分:1)

如果输入的数字大于Long.MAX值,那么接下来你会做什么。它会导致错误,因为您不知道在哪里存储它。

更好的方法是在用户输入的范围内检查是否在范围内。如果大于Long.MAX,请将其存储在BigInteger

答案 2 :(得分:1)

使用BigIntegerlongValueExact()方法,并捕获例外:

public static void main(String[] args) {
    test("123");
    test("9223372036854775807");  // Long.MAX_VALUE
    test("-9223372036854775808"); // Long.MIN_VALUE
    test("9223372036854775808");  // Long.MAX_VALUE + 1
    test("-9223372036854775809"); // Long.MIN_VALUE - 1
    test("abc");
}
private static void test(String input) {
    long longVal;
    try {
        longVal = new BigInteger(input).longValueExact();
    } catch (NumberFormatException e) {
        System.out.println("Value is not a valid integer number: " + input);
        return;
    } catch (ArithmeticException e) {
        System.out.println("Value exceeds range of long: " + input);
        return;
    }
    System.out.println("Got valid long value: " + longVal);
}

<强>输出

Got valid long value: 123
Got valid long value: 9223372036854775807
Got valid long value: -9223372036854775808
Value exceeds range of long: 9223372036854775808
Value exceeds range of long: -9223372036854775809
Value is not a valid integer number: abc

答案 3 :(得分:0)

您可以使用Long.MAX_VALUE访问最大值,并在if条件下检查用户输入的值。

答案 4 :(得分:0)

这是另一种解决方案,不使用func webView(webView: UIWebView, shouldStartLoadWithRequest request: NSURLRequest, navigationType: UIWebViewNavigationType) -> Bool { let surl = request.URL?.absoluteString if surl == "http://myurl/m/include/login.php"{ print("login pressed") ////call login view controller var dvc = ViewController() dvc.openNewViewController() return false } return true } public func openNewViewController(){ var newController = LoginViewController() self.presentViewController(newController, animated: true, completion: nil) } 核心

以外的额外类
Java

答案 5 :(得分:0)

将字符串视为BigInteger并进行比较是最好的方法。但这是另一个只是为了表明通常有不止一种方法来实现某些目标:

public boolean isInRange(String number) {
    String maxValue = Long.toString(Long.MAX_VALUE);
    number = number.replaceFirst("^0+", "");  // remove leading zeroes
    return number.length() < maxValue.length() ||
           (number.length() == maxValue.length() &&
            number.compareTo(maxValue) <= 0);
}

这假设number完全由数字组成(无负号)。