代码之家  ›  专栏  ›  技术社区  ›  Michail Michailidis

当从字符串转换为int导致精度损失时,如何抛出异常?

  •  2
  • Michail Michailidis  · 技术社区  · 9 年前

    是否有一种方法可以在从字符串转换为int之前或之后实际检查是否存在精度损失并引发异常?

    $id = "21321312412435453453453454"
    $numId = (int) $id;
    
    2 回复  |  直到 9 年前
        1
  •  4
  •   Rizier123 tarnfeld    9 年前

    这应该对您有用:

    (只使用了php predefined constants 进行比较)

    $id = "21321312412435453453453454";
    if($id > PHP_INT_MAX)
        echo "too big";
    else
        echo "okay";
    

    输出:

    too big
    

    编辑:

    对于负数,你可以这样定义常数:

    define('PHP_INT_MIN', ~PHP_INT_MAX); 
    

    你可以阅读 PHP_INT_MAX 即使在手册中: http://php.net/manual/en/language.types.integer.php

    还有一句话:

    整数的大小取决于平台,尽管通常的最大值约为20亿(即32位带符号)。64位平台的最大值通常约为9E18,但Windows除外,Windows始终为32位。 PHP不支持无符号整数 整数大小可以使用常量PHP_INT_size来确定,并且 最大限度 使用常数的值 PHP_INT_MAX 自PHP 4.4.0和PHP 5.0.5以来。

        2
  •  1
  •   Christian Lundahl    9 年前

    试着将其转换为字符串,并将两者进行比较。