1

以下を実行すると、N, Y, Y.

2 番目の例では、float/double にキャストバックせず、 を にドロップせずに'0.00' != '0'をテストする一貫した方法があるため、そうでない理由は理解しています。0=====

echo bcmul( '5.1', '2.234', 2 );
echo bcmul( '5.1', '2.234', 2 ) === '0' ? '  Y  ' : '  N  ';
echo "<br/>";

echo bcmul( '0.00', '000.00', 2 );
echo bcmul( '0.00', '000.00', 2 ) === '0' ? '  Y  ' : '  N  ';
echo "<br/>";

echo bcmul( '0', '0', 2 );
echo bcmul( '0', '0', 2 ) === '0' ? '  Y  ' : '  N  ';
echo "<br/>";

ノート

をドロップしたくないのはなぜ===ですか?

などの方法を使用して、より壮大なプロジェクトの一部として機能を提供しているget_total_cost()場合、関数が数値を返すことを期待しているときに、他の開発者が厳密な比較をやめなければならないことは直感的ではないと思います。文字列として。

4

2 に答える 2

2

0.00 !== 0A.同じタイプではないため、はいが有効です。

var_dump(0.00,0);

出力

float 0
int 0

B.0 !== "0"は同じ型ではないため有効です

var_dump(0,"0");

出力

int 0
string '0' (length=1)

C. 削除したくない理由===

var_dump("hello" == 0 );  true
var_dump("hello" === 0 );  false

結論

$a === $b $a が $b と等しく、それらが同じ型である場合は TRUE。

私はこれがあなたが望むものだと思います

echo (int) bcmul('0.00', '000.00', 2) === (int) '0' ? '  Y  ' : '  N  '; 
       ^                                    ^
于 2013-02-12T12:34:26.027 に答える
0

ctype_digit()を使用して、返された文字列に「クリーンな」整数が含まれているかどうか、またはどこかに浮動小数点ドットが含まれているかどうかを判断し、2セットのY/N関数を使用することができます。1つはstring-ints用で、もう1つはstring-floats用です。

于 2013-02-12T12:39:39.180 に答える