在PHP中回应两个变量的产品

时间:2017-07-08 08:25:24

标签: php

我有以下代码:

    $sel_referrals1="SELECT SUM(amount) as da_sum FROM topup WHERE user_id IN(SELECT t1.referree
FROM referrals AS t1
LEFT JOIN referrals AS t2 ON t2.referrer = t1.referree
LEFT JOIN referrals AS t3 ON t3.referrer = t2.referree
LEFT JOIN referrals AS t4 ON t4.referrer = t3.referree
LEFT JOIN referrals AS t5 ON t5.referrer = t4.referree
LEFT JOIN referrals AS t6 ON t6.referrer = t5.referree
LEFT JOIN referrals AS t7 ON t7.referrer = t6.referree
LEFT JOIN referrals AS t8 ON t8.referrer = t7.referree
LEFT JOIN referrals AS t9 ON t9.referrer = t8.referree
LEFT JOIN referrals AS t10 ON t10.referrer = t9.referree
LEFT JOIN referrals AS t11 ON t11.referrer = t10.referree
WHERE t1.referrer = '{$_SESSION['user']}')
AND YEAR(date_time) = YEAR(CURRENT_DATE()) 
AND MONTH(date_time) = MONTH(CURRENT_DATE())";


    $selected1=mysqli_query($conn,$sel_referrals1);
    $sel_level1_array=mysqli_fetch_row($selected1);
    $level1=number_format($sel_level1_array[0],2);

$level1评估为 1260.00 。我有另一个变量$rate1,其设置如下:$rate1=0.02。我需要将$level1$rate1相乘$level1 * $rate1。但是,当代码执行{{1}}的乘法运算时,结果会产生 0.02

我的预期结果 25.20 。我做错了什么?

4 个答案:

答案 0 :(得分:1)

$ level1的数据类型是3个操作中的String(将转换为值等于1的整数)。

答案 1 :(得分:1)

我猜你宣布$level1的值为number_format(1260,2)! 它echo $level1."<br>";给你1,260.00! 你应该声明它是普通的数字!

答案 2 :(得分:1)

一切都很好。

试试这个:

<?php
 $rate1=0.02;
 $level1=1260;
 echo "Level1 = ".$level1.'<br>';
 echo "Rate1 = ".$rate1.'<br>';
 echo "Format Number using variables = ".number_format($level1 * $rate1,2).'<br>';
 echo "Format Number using numbers = ".number_format(1260 * 0.02,2);
?>

答案 3 :(得分:0)

问题源于OP更新代码中的这一陈述:

$level1 = number_format( $sel_level1_array[0], 2 );

声明本身很好。困难在于下一个$ level1乘以$ rate1,产生0.02的看似奇怪的结果。一旦理解了PHP解析器的行为方式,它就有意义了。

默认情况下,当number_format()仅包含两个参数时,它会返回一个数字字符串,其中包含逗号作为千位分隔符。因此,分配给$ level1的值实际上是&#34; 1,260.00&#34;,超出PHPland的世界认为与 1260.00 基本相同。但是,解析器不同意您在以下示例中观察到的复制此问题:

<?php

$rate1 = 0.02;
$level1 = number_format(1260,2);

var_dump($rate1 * $level1);  // 0.02

请参阅demo

如果你设置了error_reporting(),令人震惊的是,代码甚至没有发出关于最后一个语句的通知 - 除非你使用的是PHP 7.1+(参见here),在这种情况下它引发了此错误消息:

  

注意:遇到一个结构不正确的数值......

此消息的原因归结于逗号,即number_format()插入到数字字符串中。一旦解析器遇到非数字字符,在处理完第一个数字&#34; 1&#34;之后,它就不再进一步处理字符串,导致它过早地评估为整数。因此,为了确保准确且预期的结果,数字字符串在用作操作数时不应包含逗号。

你可以避免这个PHP&#34;陷阱&#34;通过最初指定number_format()应排除千位分隔符,如下所示:

<?php

$level1 = number_format(1260,2,'.','');

随后,$ rate1乘以$ level1产生25.20的预期结果;见here

或者,可以简化代码并仅将number_format()应用于最终结果;见demo