Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
In questo argomento vengono descritti alcuni dei problemi che gli sviluppatori riscontrano frequentemente quando lavorano con numeri a virgola mobile in ADO.NET. Questi problemi sono causati dal modo in cui i computer archiviano numeri a virgola mobile e non sono specifici di un provider specifico, ad System.Data.SqlClient esempio o System.Data.OracleClient.
I numeri a virgola mobile in genere non hanno una rappresentazione binaria esatta. Al contrario, il computer archivia un'approssimazione del numero. In momenti diversi, è possibile usare numeri diversi di cifre binarie per rappresentare il numero. Quando un numero a virgola mobile viene convertito da una rappresentazione a un'altra rappresentazione, le cifre meno significative di tale numero possono variare leggermente. La conversione si verifica in genere quando il numero viene convertito da un tipo a un altro. La variazione si verifica se la conversione avviene all'interno di un database, tra tipi che rappresentano valori di database o tra tipi. A causa di queste modifiche, i numeri che sarebbero logicamente uguali potrebbero avere modifiche nelle cifre meno significative che le fanno avere valori diversi. Il numero di cifre di precisione nel numero può essere maggiore o minore del previsto. Se formattato come stringa, il numero potrebbe non mostrare il valore previsto.
Per ridurre al minimo questi effetti, è consigliabile usare la corrispondenza più vicina tra i tipi numerici disponibili. Ad esempio, se si usa SQL Server, il valore numerico esatto può cambiare se si converte un valore Transact-SQL di tipo reale in un valore di tipo float. In .NET Framework, la conversione di un Single in un Double può anche produrre risultati imprevisti. In entrambi questi casi, una buona strategia consiste nel fare in modo che tutti i valori nell'applicazione usino lo stesso tipo numerico. È anche possibile usare un tipo decimale a precisione fissa o convertire i numeri in virgola mobile in un tipo decimale a precisione fissa prima di usarli.
Per risolvere i problemi relativi al confronto di uguaglianza, prendere in considerazione la codifica dell'applicazione in modo che le variazioni nelle cifre meno significative vengano ignorate. Ad esempio, invece di confrontare per verificare se due numeri sono uguali, sottrarre un numero dall'altro numero. Se la differenza rientra in un margine accettabile di arrotondamento, l'applicazione può considerare i numeri come se fossero uguali.