Saltar al contenido

¿Cuál es la diferencia entre NUMERIC y FLOAT en BigQuery?

Solución:

Me gustan las respuestas actuales. Quiero agregar esto como prueba de por qué NUMERIC es necesario:

SELECT 
  4.35 * 100 a_float
  , CAST(4.35 AS NUMERIC) * 100 a_numeric

ingrese la descripción de la imagen aquí

Esto no es un error, así es exactamente como IEEE define los flotadores que deben manejarse. mientras tanto NUMERIC exhibe un comportamiento más cercano a lo que los humanos esperan.

Para otra prueba de NUMERIC utilidad, esta respuesta muestra cómo NUMERIC puede manejar números demasiado grandes para que JavaScript los maneje normalmente.

Antes de culpar a BigQuery por este problema, puede verificar que la mayoría de los otros lenguajes de programación harán lo mismo. Python, por ejemplo:

ingrese la descripción de la imagen aquí

Hay bastantes diferencias:

  • Abarcar: FLOAT puede ser tan grande como ± 2 ^ 1023 (aunque no puede representar todos los enteros en este rango)

  • Precisión cercana a cero: cercana a cero, FLOAT puede ser tan preciso como 2 ^ -1022.

  • NaN / Inf: FLOAT tiene “no un número” y valores “infinitos” positivos y negativos, mientras que NUMERIC no.

  • Tamaño de almacenamiento: cada uno NUMERIC requiere 16 bytes de almacenamiento, pero FLOAT solo requiere 8 bytes.

  • Naturaleza impredecible: como insinúa Ajay, el gran inconveniente de FLOAT es que los números que puede representar con precisión no se alinean tan de cerca con los números que normalmente nos interesan. Como resultado, el punto flotante debe usarse para cantidades físicas donde algún error es aceptable. Si necesita resultados predecibles, exactos y predecibles para humanos, como en cálculos financieros, utilice NUMERIC

La principal diferencia es que los flotantes / dobles son tipos de punto flotante binario y un numérico almacenará el valor como un tipo de punto decimal flotante. Por lo tanto, Numeric tiene una precisión mucho mayor y generalmente se usa en aplicaciones monetarias (financieras) que requieren un alto grado de precisión. Pero en cuanto al rendimiento, Numeric es más lento que los tipos double y float. Numeric puede representar con 100% de precisión cualquier número dentro de la precisión del formato decimal, mientras que Float y Double, no pueden representar con precisión todos los números, incluso los números que están dentro de la precisión de sus respectivos formatos.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *