我有一个脚本可以在一段时间内分期付款。
直接正确吗?显然不是根据php。
这是发布的表单信息,我知道这是发布的内容,因为我是var_dump()所有发布值,以确保发布的内容。
array
'total' => string string '999,999.99' (length=10)
'howmany' => string '16,666.67' (length=9)
'installmentcost1' => string '999,999.99' (length=10)
这是非常简单的php公式
$tempInstallments = (intval($_POST['howmany'])) - 1; // get 1 less so we can make sure the last payment is within total amount
$tempInstallmentCost = (floatval($_POST['installmentcost1'])) * $tempInstallments; //installment price * the installment period minus 1 month
$tempTotal = floatval($_POST['cpototal']) - $tempInstallmentCost; // get the final payment cost
现在不幸的是,由于某种原因,这给了我一些非常糟糕的数学,我也是var_dump()。
这是我正在使用的var_dump:
var_dump($tempInstallments);
var_dump($_POST['installmentcost1']);
var_dump($tempInstallmentCost);
var_dump($tempTotal);
以下是倾销的内容:
int 59
string '16,666.67' (length=9)
float 944
float 55
正如您所看到的,它们甚至不接近所需的实际信息。
例如,它看起来如下所示:
int 59
string '16,666.67' (length=9)
float 983,333.53 (length=10)
float 16,666.46 (length=9)
任何想法为什么会这样。我甚至确保信息是一个确定的浮点数或int。
由于
答案 0 :(得分:3)
intval()
和floatval()
不处理标点符号,因此intval("1,234.56")
为1
。您可以改为使用filter_var()
:
$s = '1,234.56';
var_dump(filter_var($s, FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION));
这会产生:
string(7) "1234.56"
如果需要,您可以intval()
或floatval()
。或者只是删除逗号:
$s = '1,234.56';
$s = str_replace(',', '', $s);
var_dump(floatval($s));