代码之家  ›  专栏  ›  技术社区  ›  Shiro

四舍五入机构精确到0.05

  •  9
  • Shiro  · 技术社区  · 15 年前

    我想通过使用php4,5.2及以下版本(不是5.3)来解决舍入机制

    http://www.bnm.gov.my/index.php?ch=209&pg=657&ac=568

    before rounding | after rounding
    
              89.90 | 89.90
    
              89.91 | 89.90
    
              89.92 | 89.90
    
              89.93 | 89.95
    
              89.94 | 89.95
    
              89.95 | 89.95
    
              89.96 | 89.95
    
              89.97 | 89.95
    
              89.98 | 90.00
    
              89.99 | 90.00
    

    我试着用string将其拆分并手动添加,但这并不是一个好的解决方案,希望这里能找到人来解决它。

    10 回复  |  直到 13 年前
        1
  •  17
  •   mauris    15 年前

    使用此功能

    function rndfunc($x){
      return round($x * 2, 1) / 2;
    }
    
        2
  •  8
  •   Craig McQueen Dr. Watson    11 年前

    从概念上讲,该过程可按以下方式进行:

    1. 除以0.05
      • 或乘以(1/0.05)
    2. 四舍五入到最近的整数
    3. 乘以0.05
        3
  •  1
  •   xtofl Adam Rosenfield    15 年前

    您基本上希望将值映射到网格。网格定义为 a multiple of .05

    什么 不是吗

    代码:

    $step = .05;
    $multiplicand = floor( $value / $step );
    $rest = $value % $step ;
    if( $rest > $step/2 ) $multiplicand++; // round up if needed
    $roundedvalue = $step*$multiplicand;
    
        4
  •  0
  •   Travis    15 年前

    乘二,然后四舍五入,再除以二。

        5
  •  0
  •   James Anderson    15 年前

    提示:-

    $input1=24.05;

    $things=abs($input*20);//481“.05”s

    $ouput=$tenpcnt/20;

    echo$ouput;//2.40

        6
  •  0
  •   Abu Aqil    15 年前
    function round5Sen ($value) { 
    
        return number_format(round($value*20,0)/20,2,'.','');
    } 
    
    echo round5Sen(155.13);
    echo "\n";
    echo round5Sen(155.12);
    echo "\n";
    echo round5Sen(155.0);
    echo "\n";
    echo round5Sen(155.18);
    echo "\n";
    
        7
  •  0
  •   Nathan    15 年前

    <?php
    
    // setup test
    $start_num = 89.90;
    $iterations = 10;
    
    // loop through test numbers
    for ($i = 0; $i < $iterations; $i++) {
      nickleRound($start_num + (0.01 * $i));
      echo "\n\n";
    }
    
    //
    function nickleRound($num) {
      $p = 0.05;
      echo "\n" . 'p= ' . $p;
    
      $num = round($num, 2);
      echo "\n" . 'num= ' . $num;
    
      $r = ($num / $p);
      echo "\n" . 'r= ' . $r;
    
      $r2 = ceil($r) - $r;  
      echo "\n" . 'r2= ' . $r2;
    
      $a = round($num, 1);
      if (($r2 > 0) && ($r2 < 0.5)) {
        $a = $a + 0.05; 
      }
      echo "\n" . 'a= ' . $a;
    }
    
        8
  •  0
  •   Rick Burgess    9 年前

        $step         = 0.0005;
        $multiplicand = floor($value / $step);
        $rest         = fmod($value, $step);
    
        $value = $step * $multiplicand;
    
        if ($rest > $step / 2) {
            $value += $step;
        }
    
        9
  •  0
  •   Satish Jagtap    7 年前
    //Round to nearest 0.05
    echo round ($number * 20, 0) / 20;
    
    //Round Up to nearest 0.05
    echo ceil ($number * 20) / 20;
    
    //Round Down to nearest 0.05
    echo floor ($number * 20) / 20;
    
        10
  •  0
  •   Kevin Ng    7 年前

    感谢@mauris为我解决马来西亚GST舍入机制问题提供的解决方案。它也适用于SQL。

        11
  •  0
  •   mixaslfc    4 年前

    PHP具有用于PHP4、PHP5、PHP7和PHP8的函数round()

    https://www.php.net/manual/en/function.round.php