2013-02-12 53 views
1

運行以下內容,我期望收到N, Y, Y使用BCMath時是否有一致的方法來測試0(零)?

我明白爲什麼我不能,因爲'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()方法,我不覺得這是直觀的其他開發者不得不放棄嚴格的比較,當他們正期待函數返回一個數值作爲一個字符串。

回答

2

答:是的0.00 !== 0是有效的,因爲它們不是同一類型

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 

Conclusion

$一個=== $ B TRUE,如果$ a等於$ b,和它們屬於同一類型。

我想這是你想要的

echo (int) bcmul('0.00', '000.00', 2) === (int) '0' ? ' Y ' : ' N '; 
    ^        ^
0

你可以嘗試使用ctype_digit(),以確定是否返回的字符串包含一個「乾淨」的INT,或者如果它包含浮點點的地方,然後只有兩組Y/N函數;一個用於字符串,另一個用於字符串浮動。

相關問題