我有以下代码:
$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 。我做错了什么?
答案 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