> Faqs > Formatear decimal con coma en lugar de punto, con PHP

Formatear decimal con coma en lugar de punto, con PHP

Buenos días: He probado de todas las formas posibles para que el resultado de un código en php me lo muestre por ejem: 72,7 y NO 72.7.

Pego código:

function truncateFloat($number, $digitos) {
  $raiz = 10;
  $multiplicador = pow($raiz, $digitos);
  $resultado = ((int) ($number * $multiplicador)) / $multiplicador;
  return number_format($resultado, $digitos) (12845.98123,1,".",",");
}

Muchas gracias y saludos cordiales Jdel

Respuestas

Bueno... lo que quieres hacer es mucho más fácil de lo que piensas. Te voy a dar dos métodos que quizás te vangan ambos.

El más difícil es el que estás intentando tú. Pero aquí hay una versión corregida de tu función que utiliza una coma como separador decimal y un punto como separador de miles, que parece ser lo que deseas:

function truncateFloat($number, $digitos) {
  $raiz = 10;
  $multiplicador = pow($raiz, $digitos);
  $resultado = ((int) ($number * $multiplicador)) / $multiplicador;
  // Usar coma como separador decimal y punto para los miles
  return number_format($resultado, $digitos, ',', '.');
}

De todos modos, lo normal sería usar la función number_format de PHP, que se utiliza para formatear números con miles separados por comas y decimales separados por puntos, pero también puedes personalizar estos separadores.

Prueba con esto:

number_format($$number, $digitos, ',', '.')

Si quieres explicaciones más detalladas sobre la función number_format() te recomiendo leer el artículo Formato de números en PHP.

Espero que con estas indicaciones puedas resolver tu duda. Un saludo!

Alfonso
289 11 19 16

Muy amable Alfonso en responderme; he leído las directivas de php antes de formular esta pregunta y he probado tu sugerencia, sigue sin funcionarme. Tengo una pagina con un formulario donde se coloca la cantidad de comensales y mediante la página resultado.php me trae la cantidad en la misma página "comensales" desplegándose hacia abajo y con la posibilidad de "imprimir"dicho resultado. Todo lo realiza correctamente, salvo que, como por ejemplo ingreso cantidad de comensales 77 y me devuelve entre otros ingredientes "fiambres" 7.7 kilogramos y lo que yo deseo es que me muestre 7,7 kilogramos o 7,700 kgs. Tanto en el php como el html tengo insertado "charset: UTF-8". Muy agradecido y saludos cordiales

Jacinto
2 1

El formateo en PHP de números es como han comentado. Debes tener un problema distinto en tu código. Sería bueno que mostrases lo que estás haciendo que quizás pueda dar alguna pista para poder ayudarte.

Igual tienes un problema al tratar la entrada como un número y te viene una cadena, pero creo que eso no debería ser problema, como puedes ver en el siguiente código.

<?php
$comensales = "77";
$cantidad = 0.1;
$fiambres = $comensales * $cantidad;
?>

La cantidad de fiambres que necesitas es <?=number_format($fiambres, 2, ',', '.')?> Kg

Ese código da como salida:

La cantidad de fiambres que necesitas es 7,70 Kg
Victor
259 7 18 11

Muchas gracias Víctor: He aquí parte del código, aclaro que funciona bien, salvo que me entrega sin la coma. Y lo que pretendo es que me lo entregue como lo hace tu respuesta.


```Este es el php

// Recogemos el valor enviado
$comensales = $_POST['comensales'];
//$comensales = 1;

/**
 * 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 = 0.1;
  $multiplicador = pow($raiz, $digitos);
  $resultado = ((int) ($number * $multiplicador)) / $multiplicador;
  // Usar coma como separador decimal y punto para los miles
  return number_format($$number, $digitos,2, ',', '.');
}

// Hacemos los cálculos
// El operador * sirve para multiplicar.
$comensales = $comensales * 1 / 1;
$asado = $comensales * 300 / 1000;  // 300 sería el número de gramos para asado por comensal
$chorizo = $comensales * 01.1 / 1; // 100 sería el número de gramos para chorizos por comensal
$matambre = $comensales * 100 / 1000; // 100 sería el número de gramos para matambre por comensal

// Mostramos los resultados
$datos = '<br>';
$datos.= '<h2>Necesitaremos lo siguiente para:</h2>';
$datos.= '<br>';
$datos.= '' . $comensales . ' comensales, ';
$datos.= '<br>';
$datos.= '<h4>Para la parrilla</h4>';
$datos.= '<br>';
$datos.= '' . $carbon . '  kilogramos  de carbon.';
$datos.= '<br>';
$arr = ["datos" =>  $datos];
echo json_encode($arr);

//
El formulario que recoge todos los datos, en la misma página):
<form id = "formResultado">
                    <div class = "field name-box">
                        <input class = "input" type = "number" name = "comensales" id = "comensales" placeholder = "Son...?" required />
                        <label for = "number">Cantidad</label>
                    </div>
                    <br>
                    <br>
                    <input class="input" id = "botonEnviar" type = 'button' value = 'Enter'>
                </form>
            
                <section class="resultado">
                    <a href="javascript:imprSelec('resultado')"><h4>Imprimir</h4></a>
                <div id = "resultado">
                </div>
                <hr>
            
            <script src="js/jquery.min.js" ></script>
            <script src="js/funciones.js" ></script>
Jacinto
2 1

La función number_format funciona perfectamente para lo que quieres

<?php
$comensales = "7";
$asado = $comensales * 300 / 1000;
echo number_format($asado, 2, ',', '.') . '  kilogramos  de asado.';
?>

Esto imprime como salida "2,10 kilogramos de asado."

si no te sale así pruébalo en algún intérprete online de PHP y verás que sale bien. por ej https://onlinephp.io/ ... no sea que tengas alguna versión de php con error o sea algo de tu ordenador o del navegador.

Agustín
233 5 15 13
Muchas gracias Agustín, veré entonces por donde está el inconveniente.