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);