9
votes

Mécanisme d'arrondi au 0,05 le plus proche

Je voudrais résoudre le mécanisme d'arrondi en utilisant PHP4,5.2 et ci-dessous (pas 5.3) Actuellement, je fais 0,05 arrondi, quelque chose comme cette page:

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

J'essaie d'utiliser la chaîne pour la diviser Sorti et manuellement ajout, mais pas vraiment une bonne solution, dans l'espoir de trouver quelqu'un pour la résoudre.


4 commentaires

fonction rndfunc ($ x) {retour rond ($ x * 2, 1) / 2; } c'est du travail! Merci beaucoup mauris


Si une réponse a résolu votre problème, veuillez cliquer sur la grande tick à côté de leur réponse.


@Shiro - Yep comme E.C.HO a dit, a mis une tique pour que les autres arrivent à cette question, ils connaissent la réponse.


Oups, je suis désolé oublié de mettre une grosse coche là-bas. Merci beaucoup de gars ~


11 Réponses :


0
votes

multiplier par deux, puis rond, puis diviser par deux.


0 commentaires

1
votes

Vous voulez essentiellement cartographier des valeurs à une grille. La grille est définie comme un multiple de 0,05 . En général, vous devez trouver les multiplicands votre valeur réside entre.

Qu'est-ce que n'est pas dans la table sont les nombres négatifs. Vous devez décider de déterminer s'il faut s'éloigner de zéro (symétrique) ou toujours dans la même direction (c'est-à-dire positif).

code: xxx


4 commentaires

Il y a une division par zéro sur le $ reposer = ligne.


@ E.C.ho: Comment cela peut-il être si pas d'étape n'est pas zéro?


A dirigé le code et c'est le message d'erreur qui est venu en retour.


Cela ne sera pas toujours arrondir, essayez par ex. Valeur de 11.25 - Ce code aboutira à .55 alors que la réponse correcte est de 0,5625 => 0,60. Pour toujours arrondir, vous pouvez simplement faire: plafond ($ valeur / pas d'étape) * $ étape



17
votes

Utilisez cette fonction

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


3 commentaires

Vous vous retrouvez avec un seul nombre après la décimale si elle se termine en zéro (0).


sprintf ('% 0.2f', rndfunc ($ x));


Cela fonctionne pour moi dans WordPress WooCommerce Filtre de prix. Merci beaucoup add_filter ('woocommerce_get_price_excluing_tax', 'rond_price_product', 10, 1); add_filter ('woocommerce_get_price_incluing_tax', 'rond_price_product', 10, 1); add_filter ('woocommerce_tax_round', 'rond_price_product', 10, 1); add_filter ('woocommerce_get_price', 'rond_price_product', 10, 1); fonction rond_price_product ($ prix) {retour rond ($ prix * 2, 1) / 2; }



9
votes

Conceptuellement, la procédure peut être effectuée comme suit:

  1. Divisez de 0,05
    • ou multipliez par (1 / 0,05)
    • rond au plus proche entier
    • multiplier par 0,05

1 commentaires

Je pense que cela aurait dû être la réponse acceptée ... Comme cela vous permettra d'aborder essentiellement à n'importe quel nombre que vous désirez. Vous voulez parler de 0,005? aucun problème. Ou même 0.00002? Sûr! Rond ($ prix / $ min_size) * $ min_size $ prix peut être n'importe quel float min_size est le plus petit numéro possible (par exemple: 0,005 ou 0.000002) simple, mais brillant!



0
votes

indice: -

$ INPUT1 = 24.05;

$ choses = ABS ($ entrée * 20); // 481 ".05" S

$ tenppcnt = ABS ($ choses / 10); // 48 ".05" S

$ aller-out = $ tenppcnt / 20;

echo $ aller-out; // 2.40


0 commentaires

0
votes
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";

0 commentaires

0
votes

Je suis sûr qu'il y a des solutions plus élégantes, mais cela semble convenir à la tâche:

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


1 commentaires

Mauris gagne - J'ai pensé qu'il y avait une méthode plus simple. (-:



0
votes

Développer un peu sur @xtofl pour permettre des étapes plus précises (non techniquement requises pour cette question) xxx


0 commentaires

0
votes
//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;

0 commentaires

0
votes

Merci @MAURIS pour la solution pour résoudre mon problème sur le mécanisme d'arrondi de la TPS de Malaisie. Cela fonctionne également dans SQL.

DÉCLAREZ @TESTABLE À LA TABLE TABLE (NUMÉRO DECIMAL (20,4));

Insérer dans des valeurs @ReCTABLES (89,91), (89,92), (89,93), (89,94), (89,95), (89,96), (89,97), (89,98), (89,99), (89,99), >

Sélectionnez le numéro, rond (numéro * 2, 1) / 2 comme «arrondi» de @RePTable


0 commentaires

0
votes

php a la fonction ronde () pour le PHP 4, PHP 5, PHP 7, PHP 8

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


0 commentaires