为什么这个简写if语句在长格式工作时返回0?

时间:2016-02-10 04:34:47

标签: php ternary-operator

我有以下代码,其中我有一个定义的值,但是当我尝试对它做任何简写方程时,它返回0.

三元操作

$m = 1.10;
echo 'Markup Percentage : ' . ( $m > 1 ? ($m * 100) - 100 :  'N/A' ) + ' %';

结果:

  

标记百分比:0%

标准操作。

$m = 1.10;

echo 'Markup Percentage : ';    
if($m > 1) {
   echo ($m * 100) - 100;
} else {
   echo 'N/A';
}
echo ' %';
  

加价百分比:10%

如果不明显,三元操作的结果应与标准操作相同。我做错了什么,或者这是php 5.4中的一个错误?

2 个答案:

答案 0 :(得分:5)

这是因为操作员错误而发生的。 .用于连接,而不是+。试试 -

$m = 1.10;
echo 'Markup Percentage : ' . ( ($m > 1) ? (($m * 100) - 100) :  'N/A' ) . ' %';

但我建议在使用三元运算符时正确分组操作。对于所有运营商而言,不仅适用于三元。理解优先级非常重要。

echo 'Markup Percentage : ' . ( $m > 1 ? ($m * 100) - 100 :  'N/A' ) . ' %';

也应该有效。

答案 1 :(得分:1)

这是因为你在没有(的情况下使用多次计算,所以他们搞砸了,另一个错误是你使用+符号代替.

您可以使用下面的三元运算符:

$m = 1.10;
echo 'Markup Percentage : ' . ( ($m > 1) ? (($m * 100) - 100) : 'N/A' ) . ' %';
//OP: Markup Percentage : 10 %