martes, 5 de abril de 2011

[PHP] Truncar un decimal a N digitos sin redondear

Hace algún tiempo se me presentó un inconveniente a la hora de querer cortar unos resultados, pero la condición es que no se debía redondear, así que la función de php "number_format", no era la mas apropiada.

Aquí les dejo la solución final.

/**
* funcion para convertir un numero a decimal con X digitos
* @param String $number
* @param Int $digitos cantidad de digitos a mostrar
* @return Float
*/
function truncateFloat($number, $digitos)
{
    $raiz = 10;
    $multiplicador = pow ($raiz,$digitos);
    $resultado = ((int)($number * $multiplicador)) / $multiplicador;
    return number_format($resultado, $digitos);

}
 
EJEMPLO: 
truncateFloat('10.138',2);
Resultado: 10.13

22 comentarios:

  1. gracias me ha servido mucho

    ResponderEliminar
  2. Excelente muchas gracias

    ResponderEliminar
  3. Gracias Victor Excelente. Aqui te dejo mi pagina para los que esten trabajando con Jqgrid:
    https://plus.google.com/116785059505984459570/posts

    ResponderEliminar
  4. Victor encontre un pequeño detalle en la funcion si le envias truncateFloat(163.48,2,'.','') la funcion retorna 163.47 es decir redondea hacia abajo. Saludos.

    ResponderEliminar
  5. gracias... me ayuda mucho!... desde Tehuacán, Puebla... México!.. Saludos

    ResponderEliminar
  6. muchas gracias! fue de gran ayuda, Saludos cordiales

    ResponderEliminar
  7. al final en algunos casos termina redondeando la funcion les comparto la mia para quien le sirva



    ResponderEliminar
    Respuestas
    1. Hola una pregunta estoy haciendo un sistema de facturacion , y tengo un resultado por ejemplo 980 y eso lo quisiera redondear a 1000 o 950, tu sabes como lo podría hacer, ya que round solo me funciona si tuviera 980,9 eso lo aproximaria a 981 0 980 segun el caso


      Agradesco tu respuesta.

      Eliminar
  8. al final en algunos casos termina redondeando la funcion les comparto la mia para quien le sirva

    function truncado($cantidad, $decimales){
    $dividir = explode(".", $cantidad);
    if($dividir[1] == 0) {
    return number_format($cantidad, $decimales);
    }else{
    $monto = number_format($dividir[0]);
    $decimaltruncado=substr($dividir[1], 0, $decimales);

    return $monto.".".$decimaltruncado;
    }
    }

    $mivar = truncado(145999.567899, 6);

    ResponderEliminar
  9. Hola una pregunta estoy haciendo un sistema de facturacion , y tengo un resultado por ejemplo 980 y eso lo quisiera redondear a 1000 o 950, tu sabes como lo podría hacer, ya que round solo me funciona si tuviera 980,9 eso lo aproximaria a 981 0 980 segun el caso


    Agradesco tu respuesta.

    ResponderEliminar
  10. Gracias funciona perfecto, para variable seria
    $mivar="10.1380";
    truncateFloat($mivar, 2);
    Resultado: 10.13

    //Imprimir
    echo truncateFloat($mivar, 2);

    ResponderEliminar
  11. Creo que al tener una nùmero con dos decimales, alli no coge adecuadamente. Ejemplo
    7.98, sale 7.97
    pero si pongo 7.980
    sale 7.98

    Alguien que me ayude.

    ResponderEliminar
    Respuestas
    1. es que esta función no redondea, trunca...es decir,corta el numero después de los decimales que le coloques.

      Eliminar
  12. vaya lio que montais. Simplemente esto:
    $valor = ((int) ($valor * 100)) / 100

    ResponderEliminar
  13. $valor = ((int) ($valor * 100)) / 100 tampoco sirve cuando se manda el valor con 2 decimales...

    ResponderEliminar
  14. Me ha sido muy útil, gracias eres un capo !

    ResponderEliminar
  15. Gracias me funciono a la perfeccion , Muchas gracias!!

    ResponderEliminar