Php 关于浮点数的计算远不正确

Php 关于浮点数的计算远不正确,php,floating-point,int,Php,Floating Point,Int,我有一个脚本,可以计算出一段时间内的分期付款额 直截了当,对吗?显然不是根据php 这是已发布的表单信息,我知道这是正在发布的内容,因为我是var_dump()所有post值,以确保这是正在发布的内容 array 'total' => string string '999,999.99' (length=10) 'howmany' => string '16,666.67' (length=9) 'installmentcost1' => string

我有一个脚本,可以计算出一段时间内的分期付款额

直截了当,对吗?显然不是根据php

这是已发布的表单信息,我知道这是正在发布的内容,因为我是var_dump()所有post值,以确保这是正在发布的内容

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_转储:

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)
你知道为什么会这样吗。我甚至要确保信息是一个确定的浮点或整数

谢谢
intval()
floatval()
不处理标点符号,所以
intval(“1234.56”)
1
。您可以改为使用
filter\u 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));
intval()
floatval()
不处理标点符号,因此
intval(“1234.56”)
1
。您可以改为使用
filter\u 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));

谢谢,我没有想到逗号不会读,因为是php把它们放在那里开始。谢谢,我没有想到逗号不会读,因为是php把它们放在那里开始。