如何避免explode分割5.10时舍入小数位?获取完整10的方法
解决PHP中explode处理5.10时第二个元素为1而非10的问题
这个问题的根源其实是PHP对浮点数的处理特性,咱们一步步拆解:
为什么会出现这个结果?
当你写$user->height = 5.10;或者直接用explode('.',5.10)时,5.10是一个浮点数。在浮点数的逻辑里,5.10和5.1是完全相等的数值,末尾的0不会被保留。当PHP把这个浮点数转换成字符串时,它会自动简化为"5.1",所以explode('.', "5.1")自然就得到Array ( [0] => 5 [1] => 1 )了。
怎么实现期望的结果?
核心思路是:让5.10以字符串形式被处理,保留末尾的0。这里分两种场景给出解决方案:
场景1:可以控制赋值的形式
如果是你自己给$user->height赋值,直接把它定义为字符串即可:
$user->height = "5.10"; // 注意引号,把值作为字符串存储 print_r(explode('.', $user->height)); // 输出:Array ( [0] => 5 [1] => 10 )
场景2:值已经是浮点数(无法修改赋值逻辑)
如果$user->height已经是浮点数类型,你需要先把它格式化为带两位小数的字符串,再进行explode操作。可以用sprintf()或者number_format()来实现:
方法1:使用sprintf
$user->height = 5.10; // 实际存储为浮点数5.1 $heightStr = sprintf("%.2f", $user->height); // 格式化为两位小数的字符串"5.10" print_r(explode('.', $heightStr)); // 输出:Array ( [0] => 5 [1] => 10 )
方法2:使用number_format
$user->height = 5.10; $heightStr = number_format($user->height, 2, '.', ''); // 参数分别是:数值、小数位数、小数点分隔符、千位分隔符 print_r(explode('.', $heightStr)); // 输出:Array ( [0] => 5 [1] => 10 )
内容的提问来源于stack exchange,提问作者m1kfb
相关产品推荐
相关产品推荐

