Yakın 0,05 Mekanizması yuvarlama

6 Cevap php

I would like to solve rounding mechanism by using php4,5.2 and below (not 5.3) Currently I am doing 0.05 rounding, something like this page:

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

Bunu çözmek için birini bulabilirsiniz dışarı ayrıldı ve burada elle umuduyla, gerçekten iyi bir çözüm değil ekleyerek, ama yok dize kullanmayı deneyin.

6 Cevap

Bu fonksiyonu kullanmak

function rndfunc($x){
  return round($x * 2, 1) / 2;
}

: Kavramsal olarak, prosedür olarak yapılabilir

  1. Divide by 0.05
    • veya (1 / 0.05) ile çarpın
  2. Yakın tam yuvarlak
  3. 0.05 ile çarpın

Temelde bir kılavuza değerlerini eşlemek istiyorum. Izgara a multiple of .05 olarak tanımlanır. Genel olarak, size değer arasında yatıyor multiplicands bulmalıyız.

Ne isn't tabloda negatif sayılar vardır. Sen (yani pozitif) sıfır (simetrik) veya her zaman aynı yönde uzak yuvarlamak konusunda karar vermeniz gerekir.

kodu:

$step = .05;
$multiplicand = floor( $value / $step );
$rest = $value % $step ;
if( $rest > $step/2 ) $multiplicand++; // round up if needed
$roundedvalue = $step*$multiplicand;

Iki ile çarpın, daha sonra yuvarlak, sonra ikiye bölün.

İpucu: -

= 24.05 $ input1;

$ Şeyler = abs ($ girdi * 20); / / 481 ".05" s

$ Tenpcnt = abs ($ şeyler / 10); / / 48 ".05" s

$ = $ Tenpcnt / 20 çıktıya;

$ çıktıya echo; / / 2.40

Ben daha şık çözümler vardır eminim, ama bu görevi uygun görünür:

<?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;
}