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
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
最佳答案

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

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

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

5年前 评论
讨论数量: 12

String '0.00' (length=4)

5年前 评论

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

5年前 评论
mowangjuanzi 5年前

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

手动黑人问号

5年前 评论

@izudo

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

强转为string还是一样。

5年前 评论

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

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

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

5年前 评论

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

‘0’ == false

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

楼主 你可以去看看php 基础

5年前 评论

楼主 你可以去看看 php 基础

5年前 评论

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

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

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

5年前 评论

file

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

@be

5年前 评论

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

5年前 评论

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