PHP 三目运算 0.00 为真?

mysql 5.6
php 7.2
从数据库取的值,在三目运算中,为什么是true?有大佬能分析下源码吗?

注:mysql建表时,amount是decimal类型

php三目运算0.00为真?

echo (string)0.00 ?: '不等于0'; // 不等于0
echo (string)"0.00" ?: '不等于0'; // 0

php
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
最佳答案

这属于 PHP 类型转换问题,文档链接

echo var_dump((bool)"0.00"); // return bool(true)
echo var_dump((bool)0.00); // return bool(false)

最后建议三目运算符的简写从 ? : 改为 ?:

4年前 评论
讨论数量: 12

String '0.00' (length=4)

4年前 评论

大哥,你是在钓鱼吗?看这个论坛有多少人是憨憨 :dog:

4年前 评论
mowangjuanzi 4年前

我来做一回老实人。三元运算符,第一个表达式为true就执行问号后面的代码,为false就执行冒号后面的代码。你写的例子都是表达式结果为false的,然后你跑来说求源码,为什么这个0.00在三元表达式中是true。

手动黑人问号

4年前 评论

@izudo

$tmp['num']    = (string)0.00;
echo (string)0.00 ? : '不等于0';echo "<br/>";

强转为string还是一样。

4年前 评论

@L学习不停 你看清代码了吗?我的疑问,为啥下面这个是true.

    echo $row['amount'] ? : '不等于0';echo "<br/>";
4年前 评论
L学习不停 4年前
zzilx 4年前

第一个是字符串,后面的是数值

4年前 评论

@becage
(string)0.00 === ‘0’

‘0’ == false

4年前 评论
自由与温暖是遥不可及的梦想

楼主 你可以去看看php 基础

4年前 评论

楼主 你可以去看看 php 基础

4年前 评论

这属于 PHP 类型转换问题,文档链接

echo var_dump((bool)"0.00"); // return bool(true)
echo var_dump((bool)0.00); // return bool(false)

最后建议三目运算符的简写从 ? : 改为 ?:

4年前 评论

file

确实是true,在文档中有提到。 soga,你的值是字符串0.00,那么在文档中就提到了,字符串"0"是false,其他的是true。 这个细节我看忘了

@be

4年前 评论

从数据库里取出来还是字符串,保险起见,先做类型转换后再做其它的运算

4年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!