Cada conjunto de coordenadas almacenadas dentro de SDE.ST_GEOMETRY se almacena como una matriz comprimida de enteros de 8 bytes de longitud. La conversión de punto flotante IEEE a entero se realiza restando la referencia de coordenadas X_OFFSET (o Y_OFFSET, o Z_OFFSET, o M_OFFSET) y multiplicando por las XYUNITS (o Z_SCALE o M_SCALE). El proceso se invierte al consultar los valores de las coordenadas (dividir por la escala, añadir el desplazamiento). La diferencia entre el valor original y la representación almacenada no superará la mitad del inverso multiplicativo del factor de escala.
La ligera diferencia que se observa puede haberse introducido en la representación en coma flotante IEEE, cuando una mantisa que no es divisible uniformemente por dos provoca un redondeo al margen de los bits menos significativos, o podría deberse a la elección de una escala de referencia de coordenadas que no es una potencia de 10.
En mi instancia de ArcGIS 10.2.2, el 4326 SRID XYUNITS es de mil millones (10^9), y siguiendo su procedimiento muestra la misma precisión fuera que dentro:
SQL> SELECT srid,x_offset,y_offset,xyunits FROM sde.st_spatial_references WHERE srid = 4326;
SRID X_OFFSET Y_OFFSET XYUNITS
---------- ---------- ---------- ----------
4326 -400 -400 1000000000
SQL> create table foo(objectid number(38), shape SDE.st_geometry);
Table created.
SQL> insert into foo values (1, SDE.ST_GEOMETRY('point(1.2345 1.2345)', 4326));
1 row created.
SQL> select SDE.ST_X(SHAPE),SDE.ST_Y(SHAPE) from foo;
SDE.ST_X(SHAPE) SDE.ST_Y(SHAPE)
--------------- ---------------
1.2345 1.2345
Si está capturando los valores de las coordenadas en una API de 'C', Java o Python, la ligera diferencia de formato (que no es más de 3,4 nanómetros en el ecuador) puede ser un artefacto de su elección de formato (yo uso log10(scale_factor)
dígitos a la derecha del decimal cuando el log10 es integral, y log10(scale_factor) + 2
cuando no lo es).