PHP长十进制数字问题


PHP long decimal number issue

Im使用php解析xml,其中一个变量收到一个长十进制值。

$ctr = 0.00529440333938;

但我需要把这个数字设为0.52%,所以我试着乘以100,只取2个小数。

$real_ctr = $ctr * 100;
echo number_format($real_ctr, 2) . "%";

我得到的结果是0.00%,而不是0.52%的

然后我试着添加1只是为了测试

$real_ctr = $ctr + 1;

得到的结果是0.0052944003339381。它在末尾加1。

有什么建议我可以绕过这个问题吗?

这对我有效:

$ctr = 0.00529440333938; 
$real_ctr = (double)$ctr * 100; 
$real_ctr = number_format($real_ctr, 2, ".", "") . "%";
$real_ctr = $ctr + 1;

如果您不住在英国,请使用number_format($real_ctr,2,".",")。

它缝合$ctr,您从XML解析器中得到的是一个字符串。用途:

$ctr = floatval($ctr); // or (double)$ctr; or (float)$ctr;

以确保您的变量是浮点值。

浮点和双类型变量的本质是,它们不能用于最后一位的精度。查看手册:http://php.net/manual/en/language.types.float.php

在使用浮动之前了解浮动是很重要的——如果你正在进行任何类型的财务计算,浮动会因为其固有的不精确性而给你带来意想不到的结果。如果你需要精确的结果,你最好坚持双打,尤其是如果你在处理任何与金钱有关的事情。

所以,确保你使用的是你期望的数字类型。您遇到的问题是,由于PHP的松散类型,您的数字被转换为浮点/双精度。查看有关类型杂耍的文档:http://www.php.net/manual/en/language.types.type-juggling.php,那里可能有一些有用的信息。

基本上,你需要确保你的数字在计算中保持为整数,你需要防止PHP为你"决定"类型。如果你需要深入了解,请查看intval或BC精度数学函数:http://www.php.net/manual/en/ref.bc.php

它被读取为字符串。你是真的把它设置为等于0.005294430333938,还是你把它设置成等于你认为等于0.005299440333938的东西?在赋值语句之后试试这个,看看它是否有效:

$ctr = floatval($ctr);