with solo round redondear number_format mostrar hacia funciona down decimals decimales como arriba php rounding printf floor ceil

php - solo - Redondeo a la fracción más cercana(mitad, cuarto, etc.)



redondear php hacia arriba (4)

Por lo tanto, necesito crear las siguientes funciones, pero mi jefe no puede pensar en ninguna posibilidad en PHP sin matemáticas complicadas.

  • Redondear siempre hasta el decimal más cercano (1.81 = 1.90, 1.89 = 1.90, 1.85 = 1.90)
  • Redondea siempre al decimal más cercano (1.81 = 1.80, 1.89 = 1.80, 1.85 = 1.80)
  • Redondear siempre hasta el x.25 / x.50 / x.75 / x.00 más cercano (1.81 = 2, 1.32 = 1.50)
  • Redondear siempre a la x.25 / x.50 / x.75 / x.00 más cercana (1.81 = 1.75, 1.32 = 1.25)
  • Redondear siempre hasta la x.50 / 1 más cercana (1.23 = 1.50, 1.83 = 2)
  • Redondea siempre hacia abajo al x.50 / 1 más cercano (1.23 = 1, 1.83 = 1.50)

He buscado en Google durante 2 horas y las únicas cosas que surgieron fueron los foros de Excel. ¿Es posible con algunas líneas simples de PHP?



Según la función mround() en Excel:

function MRound($num,$parts) { $res = $num * $parts; $res = round($res); return $res /$parts; } echo MRound(-1.38,4);//gives -1.5 echo MRound(-1.37,4);//gives -1.25 echo MRound(1.38,4);//gives 1.5 echo MRound(1.37,4);//gives 1.25


Tenga en cuenta que la respuesta no es realmente hermética. Ya que estamos tratando con flotadores aquí, no se garantiza que cuando se divide el número redondeado por el denominador, se devuelve un número perfectamente redondo. Puede devolver 1.499999999999 en lugar de 1.5. Es la naturaleza de los números de punto flotante.

Se necesita otra ronda antes de devolver el número de la función.

Por si acaso alguien aterriza aquí desde google como yo lo hice :)


Ya que está buscando cuartos ( .00 , .25 , .50 , .75 ), multiplique su número por 4, redondee al número entero más cercano según lo desee ( floor si está abajo, ceil si está arriba), luego divida por 4.

1.32, hasta el cuarto más cercano :

1.32 * 4 = 5.28
piso (5.28) = 5.00
5.00 / 4 = 1.25

El mismo principio se aplica a cualquier otra fracción, como tercios u octavos ( .0 , .125 , .25 , .375 , .5 , .625 , .75 , .875 ). Por ejemplo:

1.77, hasta el octavo más cercano :

1.77 * 8 = 14.16
ceil (14.16) = 15.00
15.00 / 8 = 1.875

Solo por diversión, podrías escribir una función como esta:

function floorToFraction($number, $denominator = 1) { $x = $number * $denominator; $x = floor($x); $x = $x / $denominator; return $x; } echo floorToFraction(1.82); // 1 echo floorToFraction(1.82, 2); // 1.5 echo floorToFraction(1.82, 3); // 1.6666666666667 echo floorToFraction(1.82, 4); // 1.75 echo floorToFraction(1.82, 9); // 1.7777777777778 echo floorToFraction(1.82, 25); // 1.8