2011-05-20 62 views
8

Tengo una columna FLOAT que contiene algunos números muy pequeños como 0.00000000000234¿cómo puedo desactivar la notación exponencial cuando selecciono un flotador de MySQL?

Cuando los selecciono en MySQL, los devuelvo en notación exponencial como 2.34e-13. ¿Hay alguna manera de que pueda modificar el formato de estos números para obligar a MySQL a devolverlo como 0.00000000000234?

En última instancia, lo que quiero hacer es modificar la pantalla, no la representación subyacente del número. Por lo tanto, probablemente sea una configuración de pantalla o formato. MySQL tiene una función FORMAT(), pero no se parece en nada a lo que yo quiero (pone números en formato como 123,456.78).

+2

mysql no formatea los números, devuelve flotantes reales. ¿Qué frontend/UI estás usando para mostrar los resultados? – sehe

+0

@sehe, en realidad MySQL formatea los números en notación exponencial si tiene muchos ceros al frente de su (<1) decimal. Obtengo este resultado usando el cliente MySQL incorporado. SELECCIONE mycol FROM tabla WHERE id = 1, mycol se volverá exponencial. – Stephen

+0

Así que el cliente 'built-in '(eso no está incorporado, pero entiendo lo que quiere decir) hace el formateo. Gracias por aclarar – sehe

Respuesta

2

Debe considerar el uso de DECIMAL para almacenar esos valores, ya que los valores flotantes son todos aproximados, y son inexactos cuando se trata de números tan pequeños. Se mostraría un DECIMAL como lo desee.

+0

. Mi impresión fue que FLOAT solo era inexacto si tienes muchos dígitos significativos, no si simplemente tienes un número muy grande o pequeño. En estos casos, solo tengo 3-5 dígitos significativos, y solo estoy almacenando y recuperando. – Stephen

+0

Intenté usar un decimal y eso funcionó. No estoy seguro de querer cambiar todos mis flotantes a decimales, por lo que todavía espero encontrar una forma de cambiar el formato. Pero esto ayuda. – Stephen

+0

En realidad, pensándolo bien, esto no funcionará porque uno de los requisitos de mi aplicación es que los números estén formateados para contener números arbitrarios de decimales, pero no para tener ceros al final. Entonces, por ejemplo, quiero 2.345 y 4.5 en la misma columna, no 4.500. Entonces Decimal no es una opción para mí. Necesito de alguna manera eliminar la notación exponencial de las carrozas. – Stephen

0

Puedes usar redondo. es decir,

seleccionar ronda (columna, 10) de foo;

4

Puede forzar el número de nuevo al formato de visualización deseado. Equípelo a un valor DECIMAL lo suficientemente grande y luego envía el DECIMAL a un CHAR para obtener el formulario de visualización que estás buscando. Esto es puramente pantalla y le permite continuar almacenando flotadores en mysql (si así lo desea).

mysql> SELECT CAST(CAST(f AS DECIMAL(14,14)) AS CHAR) AS example from test; 
+------------------+ 
| example   | 
+------------------+ 
| 0.00000000000234 | 
+------------------+ 
1 row in set (0.00 sec) 

Perderá cierta precisión, por supuesto, dependiendo del valor.

+0

+1: Muy agradable :) –

+0

Gracias :) Mi primera recompensa. – Montdidier

Cuestiones relacionadas