dongzheng3113 2013-08-19 20:46
浏览 30
已采纳

使用PHP将数字舍入到设定点

I have a basic 5 star rating system based on user submissions. depending on the rating, a particular image is shown.

$user_rating contains the rating number to one decimal place.

There are 'star' images with

0.5, 1.0, 1.5, 2.0, 2.5, 3.0, 3.5, 4.0, 4.5, 5.0

in the file names.

I need whatever number is contained in $user_rating to be rounded down to the nearest value above and stored in a new variable $star_rating. The numbers can never be rounded up. Even if $user_rating is 4.9, $star_rating should be 4.5.

Can someone help me achieve this? Thanks

EDIT - using this but just returns original value - in this case 3.8

$star_rating = $user_rating;


 function roundToHalf($star_rating) {
     $temp = $star_rating * 10;
     $remainder = $star_rating % 5;
     return ($temp - $remainder) / 10;
 }
  • 写回答

4条回答 默认 最新

  • dongpan8928 2013-08-19 21:03
    关注
    function roundDownToHalf($number) {
         $remainder = ($number * 10) % 10;
         $half = $remainder >= 5 ? 0.5 : 0;
         $value = floatval(intval($number) + $half);
         return number_format($value, 1, '.', '');
    }
    
    define("ENDL", "
    ");
    
    print roundDownToHalf(4.9) . ENDL;
    print roundDownToHalf(4.5) . ENDL;
    print roundDownToHalf(3.8) . ENDL;
    print roundDownToHalf(2.3) . ENDL;
    print roundDownToHalf(1.0) . ENDL;
    print roundDownToHalf(0.6) . ENDL;
    

    Output

    4.5
    4.5
    3.5
    2.0
    1.0
    0.5
    

    All in one compact function:

    function roundDownToHalf($n) {
      return number_format(floatval(intval($n)+((($n*10)%10)>=5?.5:0)),1,'.','');
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

悬赏问题

  • ¥15 微信小程序协议怎么写
  • ¥15 c语言怎么用printf(“\b \b”)与getch()实现黑框里写入与删除?
  • ¥20 怎么用dlib库的算法识别小麦病虫害
  • ¥15 华为ensp模拟器中S5700交换机在配置过程中老是反复重启
  • ¥15 java写代码遇到问题,求帮助
  • ¥15 uniapp uview http 如何实现统一的请求异常信息提示?
  • ¥15 有了解d3和topogram.js库的吗?有偿请教
  • ¥100 任意维数的K均值聚类
  • ¥15 stamps做sbas-insar,时序沉降图怎么画
  • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看