Formato de número a 2 decimales

154

Me gustaría saber cómo puedo generar un número con 2 decimales, sin redondear el número original.

Por ejemplo:

2229,999 -> 2229,99

Ya probé:

FORMAT(2229.999, 2)
CONVERT(2229.999, DECIMAL(4,2))
Tenza
fuente
parece que estás tratando de usar comandos para truncar. ¿Por qué no simplemente usar la funcionalidad incorporada?
Fallenreaper
¿No necesitas el decimal para ser DECIMAL(6,2))? 6- Precisión (número de dígitos totales) y 2 es el número de dígitos después del decimal?
user5249203

Respuestas:

82

Quieres usar el TRUNCATEcomando.

https://dev.mysql.com/doc/refman/8.0/en/mathematical-functions.html#function_truncate

jasonlfunk
fuente
9
Truncar siempre "redondea" hacia abajo. 1.999 truncado a 2 DP sería 1.99 donde 2.00 sería matemáticamente más correcto. Si eso no es un problema, truncar está bien, pero debes tenerlo en cuenta.
GordonM
Estoy de acuerdo con GordonM y TRUNCATE debe usarse con causalidad, ¡especialmente con números de coma flotante!
Nebulosar
364

Al formatear un número a 2 decimales, tiene dos opciones TRUNCATEy ROUND. Estás buscando la TRUNCATEfunción.

Ejemplos:

Sin redondeo:

TRUNCATE(0.166, 2)
-- will be evaluated to 0.16

TRUNCATE(0.164, 2)
-- will be evaluated to 0.16

docs: http://www.w3resource.com/mysql/mathematical-functions/mysql-truncate-function.php

Con redondeo:

ROUND(0.166, 2)
-- will be evaluated to 0.17

ROUND(0.164, 2)
-- will be evaluated to 0.16

docs: http://www.w3resource.com/mysql/mathematical-functions/mysql-round-function.php

jmarceli
fuente
2
debe usar truncatepara formatear números cuando desee números truncados. ella dejó bastante claro en la pregunta que esto es lo que quería hacer. Hay muchas formas de redondeo (piso, techo, lejos de cero, hacia cero, mitad arriba, mitad abajo, mitad par). son apropiados en diferentes contextos.
Kip
16
Sí, por supuesto, pero como puedo ver, muchas personas encuentran que mi respuesta fue útil o tal vez encontraron esta pregunta cuando estaban buscando el comando ROUND. Lo dejaré como está.
jmarceli
"no deberías usar TRUNCATE para formatear números porque simplemente perderás dígitos truncados" => Bueno, ese es el punto de truncamiento ... No veo cómo deberíamos obtener 0.17 con Math. Su respuesta es perfecta para ejemplos de programación, pero no es muy exhaustiva.
Benoit Duffez
2
Como dije antes. Sé que no es una respuesta correcta para esta pregunta, pero a la gente suele gustarle :) Tal vez por el título de la pregunta, que podría ser el resultado de búsqueda para alguien que está buscando la ROUNDfunción.
jmarceli
Entonces deberías arreglarlo. Seguiré siendo útil para todos, y será 100% correcto. Win-win :)
Benoit Duffez
14

¿Qué tal CAST(2229.999 AS DECIMAL(6,2)) obtener un decimal con 2 decimales

Hituptony
fuente
44
Creo que te refieres al elenco (2229.999 como decimal (4,2))
Tío Iroh
@UncleIroh, no, creo que realmente quiere decir convert(2229.999 as decimal(4,2)).
Pacerier
3
@Pacerier: ambos funcionan técnicamente. Sin embargo, el formato para convertir es convertir (2229.999, decimal (4,2)) con una coma, por lo que probablemente tenga razón en que eso era lo que estaba buscando.
Tío Iroh
@UncleIroh, Ah sí, mi error tipográfico arriba. Que estaba hablando convert(2229.999, decimal(4,2)).
Pacerier
44
CAST (2229.999 AS DECIMAL (4,2)) le dará 99.99. DECIMAL es el número máximo de dígitos, incluido el 2 a la izquierda del decimal. CAST (2229.99 AS DECIMAL (6,2)) le dará 2230.00
russjohnson09
8

Solo use la muestra format (number, qtyDecimals): format (1000, 2) result 1000.00

Alessandro Garcia
fuente
0

Así es como usé esto es como un ejemplo:

CAST(vAvgMaterialUnitCost.`avgUnitCost` AS DECIMAL(11,2)) * woMaterials.`qtyUsed` AS materialCost
Tye Lucas
fuente
0

Mostrar como decimal Seleccione ifnull (formato (100.00, 1, 'en_US'), 0) 100.0

Mostrar como porcentaje Seleccione concat (ifnull (formato (100.00, 0, 'en_US'), 0), '%') 100%

Gregory Bologna
fuente