我使用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。
有什么建议我如何解决这个问题?
答案 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);