2010-11-15 27 views
9

Tengo una vista que debe devolver el tipo decimal para las columnas almacenadas como float.Convertir float a decimal en SQL Server 2008

puedo emitir cada columna a decimal de la siguiente manera:

, CAST(Field1 as decimal) Field1 

El problema con este enfoque, es que por defecto decimales a 18,0, que se redondea automáticamente las columnas de flotación a 0. Me gustaría mantener una precisión de hasta 12 decimales.

Sin embargo, si hago esto:

, CAST(Field1 as decimal(12,12)) Field1 

me sale un error de ejecución:

"Arithmetic overflow error converting float to data type numeric" 

columna de flotación se define como longitud: 8 Precisión: 53 en la tabla. No puedo modificar nada sobre la mesa.

¿Cuál es la forma correcta de convertirlo en decimal sin perder precisión decimal?

+1

Mi sugerencia es que dejes de almacenar datos como float ya que es un tipo de datos inexacto y obtendrás errores de redondeo si haces cálculos en él. – HLGEM

Respuesta

21

12, 12 significa que no hay dígitos antes del separador decimal: 12 dígitos en total, 12 de ellos después del período.

utilizar una gama más apropiado, por ejemplo:

DECLARE @var FLOAT = 100 
SELECT CAST(@var as decimal(20,12)) 

que le da 8 dígitos antes del separador, o ajustar según sea necesario.

+0

muchas gracias, ¿sabes si hay alguna manera de formatearlo para que solo devuelva decimales si hay un valor? si selecciono de la tabla, no muestra los 0 finales, pero después del lanzamiento, los 12 ceros SIEMPRE se muestran .. –

+0

@Sonic: ¿qué necesita: para devolver un 'DECIMAL' o formato? El formateo te dejará con un 'VARCHAR'. – Quassnoi

Cuestiones relacionadas