循环不能正常工作(浮动和整数问题?) - PHP

时间:2013-12-04 01:53:47

标签: php loops

下面的代码生成两个随机十进制值,然后将它们减去以获得$c

do-while循环试图确保$c不是整数。但我不断得到$c实际上是整数的时间。

        do{
            unset($a);
            unset($b);
            unset($c);
            unset($adjuster);
            unset($c_is_int);

            $a = mt_rand(5, 75);
            $b = mt_rand(5, 75);
            $adjuster = mt_rand(2, 20);

            $decimal_selector = mt_rand(1, 6);
            if ($decimal_selector == 1){
                $a = $a / 10;
                $b = $b / 10;
            }
            if ($decimal_selector == 2){
                $a = $a / 10;
                $b = $b / 100;
            }
            if ($decimal_selector == 3){
                $a = $a / 100;
                $b = $b / 10;
            }
            if ($decimal_selector == 4){
                $a = $a / 100;
                $b = $b / 100;
            }
            if ($decimal_selector == 5){
                $a = $a / 1000;
                $b = $b / 1000;
            }
            if ($decimal_selector == 6){
                $a = $a / 1000;
                $b = $b / 100;
            }

            if($b < $a){
                $b = $b + ($a - $b) + $adjuster;
            }

            $c = $b - $a;

            if(intval($c) == $c) {
                $c_is_int = 1;
            } else {
                $c_is_int = 0;
            }

echo $a . '<br><br>';
echo $b . '<br><br>';
echo intval($c) . '<br>';
echo $c_is_int . '<br>';
echo $c . '<br><br>';
        } while($c_is_int == 1);

附图显示了其中一个失败时间的结果。关于哪里出错的任何想法?

enter image description here

2 个答案:

答案 0 :(得分:0)

为什么不检查数字是否有小数?

$c = 123.456;

if(strpos((string) $c, '.') !== FALSE) {
    // is decimal/float/double
}

您也可以检查它是否为int

if(is_int($c))

答案 1 :(得分:0)

您要记住,使用==时,整数3和浮点数3.0将相等。

考虑:

$c_is_int = $c == floor( $c );
...
while( $c_is_int )