Прежде всего здесь будь почему:
https://stackoverflow.com / questions / 17210787/php-float-calculation-error-when-subtracting
Но он не дает решение, ошибки различные и применяя решение он вновь дает несоответствующие ответы.
// Da error al obtener $pdt
$total = 12.86;
$total_pu = 11.22;
$total_p = 1.64;
$pdt = $total - ($total_pu + $total_p);
var_dump($total);
var_dump($total_pu);
var_dump($total_p);
var_dump($pdt);
/*
Respuesta:
float(12.86)
float(11.22)
float(1.64)
float(-1.7763568394003E-15)
*/
$pdt
дай как результат:-1.7763568394003E-15
Я перехожу, чтобы это упорядочивать таким образом:
// En este caso sí sale bien.
$total = 12.86;
$total_pu = 11.22;
$total_p = 1.64;
$pagado = (real)number_format($total_pu + $total_p, 2);
$pdt = (real)number_format($total, 2) - (real)number_format($pagado, 2);
var_dump($total);
var_dump($total_pu);
var_dump($total_p);
var_dump($pagado);
var_dump($pdt);
/*
Respuesta:
float(12.86)
float(11.22)
float(1.64)
float(12.86)
float(0)
*/
Совсем правильный, вычитание дает нуль, который является правильным и логическим, но если я меняю стоимость:
// Pero si pongo otros importes ya vuelve a dar error:
$total = 1194.17;
$total_pu = 0;
$total_p = 0;
$pagado = (real)number_format($total_pu + $total_p, 2);
$pdt = (real)number_format($total, 2) - (real)number_format($pagado, 2);
var_dump($total);
var_dump($total_pu);
var_dump($total_p);
var_dump($pagado);
var_dump($pdt);
/*
Respuesta:
float(1194.17)
int(0)
int(0)
float(0)
float(1)
*/
Оказывается, что 1194.17 меньше нуль ДАЕТ ОДИН!!!!
Эта проблема, серьезнее, чем я был похож, меня он имеет flipando в цветах и я закончился тревожно. Глупость также как и уменьшать два числа заставляет меня терять утро работы.
Он произошел с вами?
Как вы это решаете?
Это только, оставшись?
Когда casteas string в один nГєmero, PHP пробегает string до того, чтобы находить первого carГЎcter не numГ©rico, despuГ©s, которого он не продолжает оценивать.
$total_string =number_format(1194.17, 2);
$total_casteado =(real) $total_string;
var_dump([
'$total_string'=>$total_string, // "1,194.17"
'$total_casteado'=> $total_casteado, // 1 (se detiene en la coma)
'cadena parcialmente numérica'=> (real) "-1.024A" // -1.024
]);
SOLUCIГ–N:
В cГіdigo выставленный, изменитесь FORMAT_NUMBER из-за ROUND и функционируй:
// En este caso sí sale bien.
$total = 12.86;
$total_pu = 11.22;
$total_p = 1.64;
$pagado = (real)round($total_pu + $total_p, 2);
$pdt = (real)round($total, 2) - (real)round($pagado, 2);
var_dump($total);
var_dump($total_pu);
var_dump($total_p);
var_dump($pagado);
var_dump($pdt);
И aquГ - tambiГ©n уже функционируй:
$total = 1194.17;
$total_pu = 0;
$total_p = 0;
$pagado = (real)round($total_pu + $total_p, 2);
$pdt = (real)round($total, 2) - (real)round($pagado, 2);
var_dump($total);
var_dump($total_pu);
var_dump($total_p);
var_dump($pagado);
var_dump($pdt);