2012-06-20 6 views
8

Per un int di SQL che viene convertito in virgola mobile, come si imposta la precisione del numero in virgola mobile?Precisazione in virgola mobile set SQL

Questa è la selezione vorrei troncare a due o 3 cifre decimali:

AVG(Cast(e.employee_level as Float))avg_level, 

Grazie!

risposta

22

In TSQL, è possibile specificare due diverse dimensioni per float, 24 o 53. Ciò imposterà la precisione su 7 o 15 cifre rispettivamente.

Se tutto quello che vogliamo fare è troncare per un determinato numero di cifre decimali, è possibile utilizzare ROUND, vale a dire:

ROUND(AVG(CAST(e.employee_level as float)), 3) 
+2

Si noti che se si utilizza float (n) per alcuni n oltre 24 o 53, viene arrotondato fino a 24 o 53 – Bort

1

Come regola generale, non è possibile specificare il numero di cifre dopo la punto decimale per un numero in virgola mobile. I tipi di dati a virgola mobile memorizzano l'approssimazione a virgola mobile più vicina a qualsiasi valore dato. È improbabile che l'approssimazione a virgola mobile più vicina abbia il numero di cifre che si desidera. Sebbene tu possa essere in grado di sopprimere ogni cifra dopo la terza, questo cambierà solo l'aspetto del valore, non il valore stesso.

I numeri interi sono una storia diversa. Un numero intero, memorizzato, convertito o convertito in un tipo di dati a virgola mobile, verrà memorizzato esattamente su un ampio intervallo. I tipi di dati a virgola mobile non devono memorizzare unità frazionali per i numeri interi.

Io suggerirei, però che la prassi migliore per voi è quello di

  • evitare di proiettare interi in virgola mobile, se non hai bisogno di unità frazionate, o
  • interi del cast in decimale o numerico se si do sono necessarie unità frazionali o
  • gestire i problemi di visualizzazione interamente nel codice dell'applicazione.