PHP长十进制数问题
我正在使用php解析xml,我的一个变量收到一个长的十进制值PHP长十进制数问题,php,long-integer,number-formatting,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%,而不是0.52% 然后我尝试添加1只是为了测试 $real_ctr = $ctr + 1; 结果是0.005294403339381。最后加1 有什么建议可
$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.005294403339381。最后加1
有什么建议可以绕过这个问题吗?It
$ctr
您从XML解析器得到的是一个字符串。使用:
$ctr = floatval($ctr); // or (double)$ctr; or (float)$ctr;
确保变量是浮点。它是一个字符串。
$ctr
您从XML解析器获得的是一个字符串。使用:
$ctr = floatval($ctr); // or (double)$ctr; or (float)$ctr;
确保您的变量是浮点。这对我有用:
$ctr = 0.00529440333938;
$real_ctr = (double)$ctr * 100;
$real_ctr = number_format($real_ctr, 2, ".", "") . "%";
$real_ctr = $ctr + 1;
如果您不住在英国,请使用数字格式($real\u ctr,2,“.”,“,”)。这对我有用:
$ctr = 0.00529440333938;
$real_ctr = (double)$ctr * 100;
$real_ctr = number_format($real_ctr, 2, ".", "") . "%";
$real_ctr = $ctr + 1;
如果您不住在英国,请使用数字格式($real\u ctr,2,“.”,“,”)。它被读取为字符串。你是真的将它设置为0.00529440333938,还是将它设置为你认为等于0.00529440333938的值?在赋值语句之后尝试此操作,看看是否有效:
$ctr = floatval($ctr);
它被读取为一个字符串。你是真的将它设置为0.00529440333938,还是将它设置为你认为等于0.00529440333938的值?在赋值语句之后尝试此操作,看看是否有效:
$ctr = floatval($ctr);
浮点型和双类型变量的本质是,它们不能依赖于最后一位的精度。查看手册: 在使用浮点数之前了解它们是很重要的——如果你在做任何类型的财务计算,浮点数会给你带来意想不到的结果,因为它们固有的不精确性。如果你需要精确的结果,最好坚持双打,尤其是当你从事与金钱有关的工作时 因此,请确保您使用的是您期望的号码类型。您遇到的问题是,由于PHP的松散键入,您的数字被转换为浮点/双精度。请查看关于键入juggling:的文档,那里可能有一些有用的信息
基本上,您需要确保您的数字在计算过程中保持为整数,您需要防止PHP“为你决定”类型。如果需要深入了解,请查看
intval
,或BC精度数学函数:浮点型和双精度型变量的本质是不能依赖它们来获得最后一位数的精度。查看手册:
在使用浮点数之前了解它们是很重要的——如果你在做任何类型的财务计算,浮点数会给你带来意想不到的结果,因为它们固有的不精确性。如果你需要精确的结果,最好坚持双打,尤其是当你从事与金钱有关的工作时
因此,请确保您使用的是您期望的号码类型。您遇到的问题是,由于PHP的松散键入,您的数字被转换为浮点/双精度。请查看关于键入juggling:的文档,那里可能有一些有用的信息
基本上,您需要确保您的数字在计算过程中保持为整数,您需要防止PHP“为你决定”类型。查看
intval
或BC精度数学函数,如果您需要深入了解:有趣,代码适合我。。。我的产出只有0.53%。可能是php版本或ini冲突?有趣的是,代码适合我。。。我的产出只有0.53%。可能是php版本或ini冲突?感谢大家的快速响应。是的,看起来这个值是一个字符串,floatval($ctr)修复了这个问题。感谢大家的快速响应。是的,看起来这个值是一个字符串,floatval($ctr)修复了这个问题。非常感谢。是的,看起来这个值是一个字符串,floatval($ctr)修复了这个问题。请注意我在这里的回答中提到的内容-floats和math可能会导致一些意外的结果!非常感谢。是的,看起来这个值是一个字符串,floatval($ctr)修复了这个问题。请注意我在这里的回答中提到的内容-floats和math可能会导致一些意外的结果!