sql - numero - Evite insertar valor exponencial en la columna DB Float
numeros negativos en oracle (2)
Tengo una mesa como
CONTACT
Name Null Type
------------------------------ -------- -----------
CONTACT_ID NOT NULL NUMBER
NAME NOT NULL VARCHAR2(45)
EMAIL NOT NULL VARCHAR2(45)
ADDRESS NOT NULL VARCHAR2(45)
TELEPHONE NOT NULL VARCHAR2(45)
AMOUNT NOT NULL FLOAT(126)
y la instrucción de inserción es:
Insert into contact("CONTACT_ID","NAME","EMAIL","ADDRESS","TELEPHONE","AMOUNT")
values (''36'',''babusailesh1117777'',''[email protected]'',''Vietnam1'',
''0904277091'',''0.0000000555559080767'');
Cuando veo el valor final insertado en la base de datos, veo un valor exponencial.
¿Cómo puedo evitar esto en el nivel de la base de datos para todas las tablas?
Esta es una función de la forma en que se muestra el valor , no de lo que se almacena en la base de datos. La base de datos solo almacena un valor flotante numérico, y todo lo que recupera y muestra los datos decide cómo mostrarlo. El valor exponencial que menciona es común para mostrar dichos números de coma flotante.
Puede hacer que Oracle devuelva una cadena formateada de forma que se visualice utilizando una función como to_char
, que le permite configurar el formateo. Sin embargo, puede tener más sentido manejar esto en cualquier programa o código que esté usando la base de datos.
También tenga en cuenta que los números de coma flotante tienen una precisión limitada, por lo que si necesita recuperar esa secuencia numérica exacta, un flotador no es el camino a seguir.
No se almacena como exponencial, se almacena en la representación de números internos de Oracle. Cuando lo consulta, se muestra con el formato numérico actual de sus sesiones:
select 0.0000000555559080767 from dual;
0.0000000555559080767
---------------------------------------
5.6E-08
Que puede anular en SQL * Plus o SQL Developer:
set numformat 999.9999999999999999999
select 0.0000000555559080767 from dual;
0.0000000555559080767
------------------------
.0000000555559080767
O formatee explícitamente el valor como una cadena, solo para visualización:
set numf ""
select to_char(0.0000000555559080767, ''9990.9999999999999999999'') from dual;
TO_CHAR(0.000000055555908
-------------------------
0.0000000555559080767
Si tiene una aplicación cliente recuperando y usando el valor, entonces debe consultarlo como un flotante, en un tipo de datos adecuado para el idioma del cliente, y luego le corresponde al cliente cómo se muestra.
Tampoco debería insertar una cadena en la columna float, que solo hace una conversión implícita; el último argumento en su inserción debe ser 0.0000000555559080767
lugar del citado ''0.0000000555559080767''
.