DECLARE @f as float
SELECT @f = 0.2
SELECT @f
Il codice sopra riportato restituisce
----------------------
0.2
(1 row(s) affected)
Nessuna sorpresa lì. Tranne che il punto in virgola mobile non può rappresentare 0.2
Esattamente.
Quindi cosa sta facendo SQLServer qui? Sta usando il floating-point con una base di 10? Ero d'accordo sul fatto che si occupava sempre di virgola mobile nella base 2 (come in pratica sarebbe il punto di virgola mobile con base 10) DECIMAL
?).
Sta facendo qualche arrotondamento?
risposte:
1 per risposta № 1float
è preciso a 15 cifre significative così 0.2
di solito uscirà come 0.2
Le tecniche menzionate nel tuo link mitigano (ma potrebbero non eliminare) la perdita di precisione per valori come questo con poche cifre
Ma con numeri più grandi, la precisione è persa
DECLARE @f as float
SELECT @f = 0.1234567890123456E0
SELECT @f
SELECT @f = 1.000000000000023E0
SELECT @f