0

intento devolver de una consulta hecha a mi controlador Laravel en php, y en la respuesta me transforma el valor del monto, ya formateado a decimal con 2 digitos en un decimal con 16 digitos.

Controlador entrega:

$saldo_amv = 16800.09;            
$saldo = (float)number_format($saldo_amv, 2, '.', '');

return response()->json(['success' => 'TRUE', 'saldo' => $saldo, 'error' =>'']);

y del codigo del controlador, una vez consumido, entraga saldo con el numero sin redondear.

{
"success": "TRUE",
"saldo": 16800.0999999999985448084771633148193359375,
"error": ""

}

De que manera puedo hacer para que me erogue sin toda la chorrrera de dígitos, como se ve en el JSON sino que solo 2 digitos como se preformateo?

4
  • 2
    No uses float para valores monetarios. Usa la clase ayudadora de Laravel llamada Number, que para eso existe. Y para PHP puro, NumberFormatter, en la cual está basada Number de Laravel. Otro consejo, NO formatees al enviar, sino al consumir los datos. Por algo muy simple, ese dato puede recibirse en Alemania, o en Estados Unidos, y según el país, puede que necesites signos o formatos propios de ese país. Si formateas al enviar, capas el dato.
    – A. Cedano
    Commented el 31 ene. a las 14:57
  • No tenemos el problema del formato de acuerdo al pais es todo dentro de el mismo pais, el inconveniente con el cual me encuentro es que al momento de entregar por return el response()->json() me convierte el valor de la variable $saldo de decimal con 2 digitos a decimal con unos 20 digitos . . . parece ser un problema de config de servidor web o algo extraño del php . . no lo se.
    – Javier
    Commented el 31 ene. a las 15:59
  • 1
    Me refiero a que en el return intentes ponerlo así: 'saldo' => $saldo_amv
    – A. Cedano
    Commented el 31 ene. a las 16:43
  • php < 7.4 tiene esos quirks con precision y json encode Commented el 1 feb. a las 0:51

1 respuesta 1

0

para quien le pueda servir encontré una respuesta a mi propio problema:

No se trataba de so convertia bien o mal el decimal con 2 digitos o no, de hecho las sugerencias recibidas son correctas y las abrazo en este caso.

Sucedía lo siguiente:

En mi PHP.ini faltó agregar la siguiente configuracion para que tome el formateo que ya le habia propinado a mi numero.

precision = 17
serialize_precision = -1

y solucioné mi inconveniente.

Agradezco la atención que obtuve y la ayuda. Aquí queda para consultas si alguien le sirve .

Saludos

1
  • 1
    te conviene setear las settings via ini_set() cosa de no afectar otras partes de la app ( el valor se mantiene hasta q finaliza ese script ) Commented el 1 feb. a las 0:36

¿No es la respuesta que buscas? Examina otras preguntas con la etiqueta o formula tu propia pregunta.