php 使用四捨五入、無條件進位、無條件捨去,處理方法

在php程式計算過程中,小數點的處理方式通常使用四捨五入、無條件進位、無條件捨去三種方式,round()、ceil()、floor()
 
 

$save_str=0;
$save_str=21*0.07;  // 1.47
print ceil($save_str);  // 無條件進位 2
print floor($save_str);  // 無條件捨去 1
print round($save_str);  // 四捨五入 1

$save_str=3200*2;  // 6400
print ceil($save_str);  // 無條件進位 6400
print floor($save_str);  // 無條件捨去 6400
print round($save_str);  // 四捨五入 6400



  但是php在無條件進位的時候出現了一個bug

$save_str=3200*0.035;  // 112

print ceil($save_str);  // 無條件進位 113  這裡有問題


不知道為什麼,112無條件進位之後,竟然變成了113,有可能是php的bug
所以保險的寫法應該要像下面這樣


$save_str=3200*0.035;  // 112

// 解決辦法
if(!is_int($save_str))
   print ceil($save_str);  // 有小數才無條件進位
else
   print $save_str;  // 整數不做進位  112