Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

1.5K
Vistas
Cuándo usar float vs decimal

Estoy creando esta API y la base de datos almacenará valores que representan uno de los siguientes:

  • porcentaje
  • promedio
  • calificar

Sinceramente, no tengo idea de cómo representar algo que el rango está entre 0 y 100% en números. Deberia ser

  • 0,00 - 1,00
  • 0,00 - 100,00
  • alguna otra alternativa que desconozco

¿Hay una opción clara para eso? ¿Una forma global de representar en bases de datos algo que va del 0 al 100% por ciento? Yendo más allá, ¿cuál es el tipo correcto para él, flotante o decimal?

Gracias.

over 4 years ago · Santiago Trujillo
7 Respuestas
Responde la pregunta

0

En general, recomendaría no usar float . Los números de punto flotante representan números en base 2, lo que hace que algunos números (exactos) se redondeen en operaciones o comparaciones, porque simplemente no se pueden almacenar con precisión en base 2. Esto puede conducir a comportamientos sorprendentes.

Considere el siguiente ejemplo :

 create table t (num float); insert into t values(1.3); select * from t; | num | | --: | | 1.3 | select * from t where num = 1.3; | num | | --: |

La comparación de base 2 del número 1.3 falla. Esto es complicado.

En comparación, decimal proporciona una representación precisa de números finitos dentro de su rango. Si cambia float a decimal(2, 1) en el ejemplo anterior, obtiene los resultados esperados.

over 4 years ago · Santiago Trujillo Denunciar

0

Tomaré la postura opuesta.

FLOAT es para números aproximados, como porcentajes, promedios, etc. Debe formatear a medida que muestra los valores, ya sea en el código de la aplicación o usando la función FORMAT() de MySQL.

Nunca float_value = 1.3 ; hay muchas razones por las que eso fallará.

DECIMAL debe usarse para valores monetarios. DECIMAL evita un segundo redondeo cuando un valor necesita ser redondeado a dólares/céntimos/euros/etc. A los contadores no les gustan las fracciones de centavos.

La implementación de MySQL de DECIMAL permite 65 dígitos significativos; FLOAT da alrededor de 7 y DOUBLE alrededor de 16. 7 suele ser más que suficiente para sensores y cálculos científicos.

En cuanto al "porcentaje", a veces he usado TINYINT UNSIGNED cuando quiero consumir solo 1 byte de almacenamiento y no necesito mucha precisión; a veces he usado FLOAT (4 bytes). No hay ningún tipo de datos ajustado específicamente para el porcentaje. (Tenga en cuenta también que DECIMAL(2,0) no puede contener el valor 100 , por lo que técnicamente necesitaría DECIMAL(3,0) .

O a veces he usado un FLOAT que tenía un valor entre 0 y 1. Pero luego tendría que asegurarme de multiplicar por 100 antes de mostrar el "porcentaje".

Más

Los tres de "porcentaje, promedio, tasa" huelen a flotadores, por lo que esa sería mi primera opción.

Un criterio para decidir sobre el tipo de datos... ¿Cuántas copias del valor existirán?

Si tiene una tabla de mil millones de filas con una columna para un porcentaje, considere que TINYINT tomaría 1 byte (1 GB en total), pero FLOAT tomaría 4 bytes (4 GB en total). OTOH, la mayoría de las aplicaciones no tienen tantas filas, por lo que esto puede no ser relevante.

Como regla "general", los valores "exactos" deben usar alguna forma de INT o DECIMAL . Las cosas inexactas (cálculos científicos, raíces cuadradas, división, etc.) deben usar FLOAT (o DOUBLE ).

Además, el formato de la salida generalmente debe dejarse en manos de la interfaz de la aplicación. Es decir, aunque un "promedio" pueda calcularse como "14,6666666...", la pantalla debería mostrar algo como "14,7"; esto es más amigable para los humanos. Mientras tanto, tiene el valor subyacente para decidir más adelante que "15" o "14.667" es el formato de salida preferible.

El rango "0.00 - 100.00" puede hacerse con FLOAT y usar el formato de salida o con DECIMAL(5,2) (3 bytes) con la predeterminación de que siempre querrá la precisión indicada .

over 4 years ago · Santiago Trujillo Denunciar

0

La diferencia entre float y decimal es la precisión. Decimal puede representar con precisión al 100 % cualquier número dentro de la precisión del formato decimal, mientras que Float no puede representar con precisión todos los números.

Use Decimal para, por ejemplo, valor financiero relacionado y use float para, por ejemplo, valor gráfico relacionado

over 4 years ago · Santiago Trujillo Denunciar

0

Recomiendo usar decimal(5,2) si va a almacenarlo de la misma manera que lo mostrará, ya que decimal es para preservar la precisión exacta. (Consulte https://dev.mysql.com/doc/refman/8.0/en/fixed-point-types.html )

Debido a que los valores de coma flotante son aproximados y no se almacenan como valores exactos, los intentos de tratarlos como exactos en las comparaciones pueden ocasionar problemas. También están sujetos a dependencias de plataforma o implementación.

( https://dev.mysql.com/doc/refman/8.0/en/floating-point-types.html )

Un valor de coma flotante escrito en una instrucción SQL puede no ser el mismo que el valor representado internamente.

Para las columnas DECIMAL, MySQL realiza operaciones con una precisión de 65 dígitos decimales, lo que debería resolver los problemas de inexactitud más comunes.

https://dev.mysql.com/doc/refman/8.0/en/problems-with-float.html

over 4 years ago · Santiago Trujillo Denunciar

0

Decimal: en el caso de aplicaciones financieras, es mejor usar tipos decimales porque le brinda un alto nivel de precisión y es fácil evitar errores de redondeo.

Doble: los tipos dobles son probablemente el tipo de datos más utilizado para valores reales, excepto el manejo de dinero.

Flotante: Se utiliza sobre todo en bibliotecas gráficas debido a las demandas muy altas de potencias de procesamiento, también se utilizan situaciones que pueden soportar errores de redondeo.

Referencia: http://net-informations.com/q/faq/float.html

over 4 years ago · Santiago Trujillo Denunciar

0

mysql> create table numbers (a decimal(10,2), b float); mysql> insert into numbers values (100, 100); mysql> select @a := (a/3), @b := (b/3), @a * 3, @b * 3 from numbers \G ********************************************************************* @a := (a/3): 33.333333333 @b := (b/3): 33.333333333333 @a + @a + @a: 99.999999999000000000000000000000 @b + @b + @b: 100

El decimal hizo exactamente lo que se supone que debe hacer en estos casos, truncó el resto, perdiendo así la parte 1/3.

Entonces, para las sumas, el decimal es mejor, pero para las divisiones, el flotante es mejor, hasta cierto punto, por supuesto. Quiero decir, usar DECIMAL no le dará "aritmética a prueba de fallas" de ninguna manera.

Espero que esto sea de ayuda.

over 4 years ago · Santiago Trujillo Denunciar

0

En tsql: Float, 0.0 almacena como 0 y no requiere definir después del dígito del punto decimal, por ejemplo, no necesita escribir Float (4,2). Decimal, 0.0 se almacena como 0.0 y tiene la opción de definir como decimal (4,2), sugeriría 0.00-1.00, al hacer esto, puede calcular el valor de ese porcentaje sin multiplicar por 100, y si informa, establezca el tipo de datos de esa columna como porcentaje como MS Excel y otra vista de plataforma como 0.5 -> 50% .

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda