使用BCMath时是否有一致的方法来测试0(零)?

时间:2013-02-12 12:21:14

标签: php bcmath

运行以下内容,我希望收到N, Y, Y

我理解为什么我不是,因为'0.00' != '0'代表第二个例子,但是有一种一致的方法来测试0而不回滚到float / double,并且没有删除{ {1}}到===

==

备注

  

为什么我不放弃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/>";

如果我通过诸如===之类的方法提供功能作为更宏大的项目的一部分,我不认为其他开发人员必须放弃严格的比较,当他们是期望函数将数值作为字符串返回。

2 个答案:

答案 0 :(得分: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)

℃。为什么我不想放弃===

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

Conclusion

  

$ a === $ b如果$ a等于$ b,则为TRUE,且它们属于同一类型。

我想这就是你想要的

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

答案 1 :(得分:0)

您可以尝试使用ctype_digit()来确定返回的字符串是否包含“clean”int,或者它是否包含某个浮点点,然后只有两组Y / N函数;一个用于字符串整数,一个用于字符串浮点数。