¿Cuál es la forma correcta de redondear una cadena PHP a dos decimales?
$number = "520"; // It's a string from a database
$formatted_number = round_to_2dp($number);
echo $formatted_number;
La salida debería ser 520.00
;
¿Cómo debe ser la round_to_2dp()
definición de la función?
php
formatting
numbers
rounding
number-formatting
Rich Bradshaw
fuente
fuente
round
es una función matemática, y esto es solo un problema de formato.Respuestas:
Puede usar number_format () :
Ejemplo:
Esta función devuelve una cadena .
fuente
round
no resuelve el problema del OP aquí.round("520", 2)
devuelve el flotador520
, y haciendo eco eso, por supuesto, no lo mostrará a 2 decimales. Para el propósito del OP, que muestra un número entero con 2 decimales al rellenarlo con ceros finales, necesita una función de formato de número, no una función de redondeo.520,00
lugar de520.00
, esto simplemente funciona.Use
round()
(use si espera un número solo en formato flotante, de lo contrario use number_format () como respuesta dada por Codemwnci ):Del manual:
...
fuente
round($number, 2);
no funciona. Quiero 520.00, no 520. No puedo creer que la ronda no lo haga por defecto.Alternativamente,
fuente
520,00
? Supongo que la otra respuesta funciona mejor en ese caso.http://php.net/manual/en/function.round.php
p.ej
fuente
Tratar:
El resultado será:
fuente
Puedes usar PHP
printf
osprintf
funciones:Ejemplo con
sprintf
:Puedes correr lo mismo sin
echo
también. Ejemplo:sprintf("%.3f", $num);
Salida:
Alternativamente, con
printf
:Salida:
fuente
Otra forma más exótica de resolver este problema es utilizarlo
bcadd()
con un valor ficticio para $ right_operand de0
.fuente
bc*
funciones no se redondean, siempre se redondean hacia abajo. Por ejemplo,bcadd("1.0999","0.0",1)
produce "1.0", no "1.1".$scale
dígitos fraccionarios. Esto equivale a redondear hacia cero.Use la función PHP number_format () .
Por ejemplo,
El resultado será:
fuente
Use la función PHP number_format () .
fuente
Esto mostrará exactamente dos dígitos después del punto decimal.
Ventaja:
Si desea mostrar dos dígitos solo después de un valor flotante y no para int, utilice esto.
fuente
round_to_2dp
es una función definida por el usuario, y no se puede hacer nada a menos que haya publicado la declaración de esa función.Sin embargo, mi suposición es hacer esto:
number_format($number, 2);
fuente
round_to_2dp($number);
se entiende como pseudocódigo; el OP estaba pidiendo que alguien le dijera con qué reemplazar esa expresión.El redondeo redondea correctamente el número y el sprintf lo fuerza a 2 decimales si resulta ser solo 1 decimal después del redondeo.
fuente
Devolverá 5.98 sin redondear el número.
fuente
floor($retailPrice * 100) / 100;
sin necesidad de formato de número entonces.Para redondeo condicional, es decir. mostrar decimal donde realmente se necesita, de lo contrario, número entero
123.56 => 12.56
123.00 => 123
fuente
Yo hago la mía.
fuente
Aquí obtengo dos decimales después del
.
(punto) usando una función ...Resultados de la función anterior:
Nueva respuesta correcta
Use la función nativa de PHP bcdiv
fuente
Esto te dará 2 números después del decimal.
fuente
Si desea utilizar dos dígitos decimales en todo su proyecto, puede definir:
Entonces la siguiente función producirá el resultado deseado:
Pero si no utiliza la función bcscale, debe escribir el código de la siguiente manera para obtener el resultado deseado.
Para saber mas
BC Math Funciones
bcscale
fuente
Numero sin ronda
fuente
Aquí hay otra solución con strtok y str_pad :
fuente
Agregar a otras respuestas, ya que number_format (), por defecto, agregará miles de separador.
Para eliminar esto, haga esto:
fuente
Ejemplos
fuente
Puede usar la función PHP round () .
fuente