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))

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:



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


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


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


0

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

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

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%

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.