2

私がここで抱えている興味深い問題は、通常、数字のニーズに合わせてそれぞれ切り上げ/切り捨てするだけですが、今日は非常に具体的にする必要があることに気付きました。私は多くのドットバージョンを持つプロジェクトに取り組んでいます。クライアント側のアプリケーションを備えた Web ベースのアプリであり、クライアントのバージョンが 2.3 以降の場合、ソフトウェアのどこに新機能が追加され、アプリで新機能が利用可能になるか、そうでない場合は必要になります。隠されること。だから私は試しています

if($version >= 2.3){/*code to show*/}

これは10進数で機能しているようには見えませんが、どちらの方向にも丸めることを伴わないことを誰もが知っている回避策はありますか?

4

3 に答える 3

8

と呼ばれるこの特定の問題に対する PHP 関数がありますversion_compare()

if( version_compare( $version, 2.3, '>=') >= 0) 
于 2012-06-26T19:30:39.123 に答える
0

バージョン比較はクールに聞こえますが、その形式を使用する必要があります。

「PHP標準化」バージョン番号を使用していない場合は、bcmathを使用bccompして2つの10進数を比較できます。

http://www.php.net/manual/en/function.bccomp.php

于 2012-06-26T19:34:02.700 に答える
0

この質問に答えるには遅すぎるかもしれませんが、私が使用する関数は次のとおりです。

if(!function_exists('CompareVersion')){
    function CompareVersion($v1='', $v2='', $s='>'){
        #   We delete all characters except numbers 0-9
        $regex = '/[^0-9]/';
        $v1 = preg_replace($regex, '', $v1);
        $v2 = preg_replace($regex, '', $v2);

        #   Wewill get the length of both string
        $lgt1 = strlen($v1);
        $lgt2 = strlen($v2);

        #   We will make sure that the length is the same by adding zeros at the end
        #   Example: 1031 and 30215 - 1031 is smaller then 1031 become 10310
        if($lgt2 > $lgt1){
            $v1 = str_pad($v1, $lgt2, 0, STR_PAD_RIGHT);
        } elseif($lgt1 > $lgt2){
            $v2 = str_pad($v2, $lgt1, 0, STR_PAD_RIGHT);
        }

        #   We remove the leading zeros
        $v1 = ltrim($v1, 0);
        $v2 = ltrim($v2, 0);

        #   We return the result
        switch($s){
            case '>':   return $v1 > $v2;
            case '>=':  return $v1 >= $v2;
            case '<':   return $v1 < $v2;
            case '<=':  return $v1 <= $v2;
            case '=':
            case '==':  return $v1 == $v2;
            case '===': return $v1 === $v2;
            case '<>':
            case '!=':  return $v1 != $v2;
            case '!==': return $v1 !== $v2;
        }
    }
}
于 2012-06-27T14:49:30.967 に答える