Tengo una tabla con campo Latitude de tipo de datos real .
Cuando lo consulto desde SQL Server Management Studio, obtengo lo siguiente:
select Latitude from Location where ID = 123 Como puede ver, se devuelve un valor de 26.09418 . Sin embargo, si escribo una consola simple en .NET y recupero los datos de la base de datos, devuelve 26.094183 . Trae de vuelta un número significativo adicional.
¿Por qué el desajuste? ¿Hay alguna manera de evitar que SSMS lo haga?
Como referencia, aquí está el código C# para recuperar los datos (usando Dapper):
string sql = "select Latitude from Location where ID = 123"; using (var connection = new SqlConnection(conn)) { var location = connection.QueryFirst<Location>(sql); Console.WriteLine(location.Latitude); } class Location { public Single Latitude { get; set; } }Sería mejor almacenar sus datos con el tipo de datos decimal preciso para una escala y precisión conocidas, o usar float .
Dicho esto, puede solucionarlo y obtener el resultado deseado en SSMS simplemente usando str
create table t(x real) insert into t values(26.094183) select * from t26.09418
select Str(x,9,6) from t26.094183
El tipo REAL se trata como FLOAT(24) .
El tipo de datos FLOAT(24), o menor, reacciona de la misma manera. Lo primero que debe recordar al experimentar con números de punto flotante en SQL Server es que SSMS representa un número de punto flotante de una manera que oculta pequeñas diferencias.
Encontrado en red-gate.com - Cálculos utilizando el tipo de datos REAL (precisión simple)