我对THIS ANSWER感到困惑。
$percentagediscount = $actualprice * ($discount/100); $payableamt1 = $actualprice - $percentagediscount; $payableamt = $payableamt1+0; echo $payableamt; if(is_float($payableamt)){ print_r(" is float"); } else{ print_r(" is not float"); }
OUTPUT: 200 is float
$payableamt1 = 200; $payableamt = $payableamt1+0; echo $payableamt; if(is_float($payableamt)){ print_r(" is float"); } else{ print_r(" is not float"); }
OUTPUT: 200 is not float
答案 0 :(得分:1)
您的第一个片段中发生的事情是,您正在进行除法(除以100)。在PHP中没有整数除法运算,因此任何结果(即使它是整数)都被转换为浮点值。因此,除法后$payableamt = 200;
是一个浮点值。
请参阅 test :
$payableamt = 200;
var_dump($payableamt);
$payableamt2 = $payableamt / 3 * 3;
var_dump($payableamt2);
注意:如果您实际执行$payableamt2 = $payableamt / 1 * 1;
,则第二个变量仍为int
,因为该操作不需要中间float
计算步骤,请参阅第二个变量的 test 即可。
如果您想测试您的结果是否没有小数位数,请尝试
if (floor($payableamt) == $payableamt) {
return '$payableamt is a whole number.';
}
您可以使用该测试将结果再次转换为int值,请参阅第三个 test 。
if (floor($payableamt2) == $payableamt2) {
$payableamt2 = (int) $payableamt2;
}
答案 1 :(得分:0)
这里是我认为应该解决您的问题的小样本代码
$amt = "0.001";
$amt2 = "1";
$amt = (float)$amt;
$amt2 = (float)$amt2;
if(fmod($amt,1) > 0)
{
echo "amt is float: ".$amt;
}
else
{
$amt = intval($amt);
echo "amt is not float: ".$amt;
}
if(fmod($amt2,1) > 0)
{
echo "<br />amt2 is float: ".$amt2;
}
else
{
$amt2 = intval($amt2);
echo "<br />amt2 is not float: ".$amt2;
}
答案 2 :(得分:0)
将值转换为float并检查是否为float。试试这个
编辑:转换为浮动后检查值是否为数字..
if(is_float((float)$payableamt)){
if(is_int($payableamt)){
print_r("is not float");
}
else{
print_r("is float");
}
}
答案 3 :(得分:0)
如果要测试字符串是否包含浮点数,而不是变量是浮点数,则可以使用这个简单的小函数:(reference link)
function isfloat($float) return ($float == (string)(float)$float);
或者您可以将filter_var()
与FILTER_VALIDATE_FLOAT
if (filter_var($float, FILTER_VALIDATE_FLOAT)){
print_r("is float");
}else{
print_r("is not float");
}