PHP长十进制数问题

时间:2011-06-03 17:11:48

标签: php long-integer number-formatting

我使用php解析xml,我的一个变量收到一个很长的十进制值。

$ctr = 0.00529440333938;

但是我需要将这个数字设为0.52%,所以我尝试乘以100并强制只有2位小数。

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

我的结果是0.00%而不是0f 0.52%

然后我尝试添加1仅用于测试目的

$real_ctr = $ctr + 1;

我得到的结果是0.005294403339381。最后增加1。

有什么建议我如何解决这个问题?

4 个答案:

答案 0 :(得分:4)

这对我有用:

$ctr = 0.00529440333938; 

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

并使用number_format($ real_ctr,2,“。”,“”),如果你不住在英国。

答案 1 :(得分:2)

它从XML解析器获得的内容$ctr是一个字符串。使用:

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

确保您的变量是浮点数。

答案 2 :(得分:1)

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

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

因此,请确保您使用的是您期望的数字类型。由于PHP的松散输入,您遇到了将您的号码转换为float / double的问题。查看关于类型杂耍的文档:http://www.php.net/manual/en/language.types.type-juggling.php,那里可能有一些有用的信息。

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

答案 3 :(得分:0)

它被读作字符串。你真的把它设置为0.00529440333938,或者你把它设置为你认为等于0.00529440333938的东西?在赋值语句后尝试这个,看它是否有效:

$ctr = floatval($ctr);