Getallen met drijvende komma
In dit onderwerp worden enkele van de problemen beschreven die ontwikkelaars vaak tegenkomen wanneer ze werken met drijvendekommanummers in ADO.NET. Deze problemen worden veroorzaakt door de manier waarop computers drijvendekommanummers opslaan en niet specifiek zijn voor een bepaalde provider, zoals System.Data.SqlClient of System.Data.OracleClient.
Getallen met drijvende komma hebben over het algemeen geen exacte binaire weergave. In plaats daarvan slaat de computer een benadering van het getal op. Op verschillende momenten kunnen verschillende getallen van binaire cijfers worden gebruikt om het getal weer te geven. Wanneer een drijvendekommagetal wordt geconverteerd van de ene weergave naar een andere weergave, kunnen de minst significante cijfers van dat getal enigszins variëren. De conversie treedt meestal op wanneer het getal van het ene type naar het andere wordt gecast. De variatie treedt op of de conversie plaatsvindt in een database, tussen typen die databasewaarden of tussen typen vertegenwoordigen. Vanwege deze wijzigingen kunnen getallen die logisch gelijk zijn, wijzigingen hebben in hun minst significante cijfers waardoor ze verschillende waarden hebben. Het aantal cijfers van precisie in het getal kan groter of kleiner zijn dan verwacht. Wanneer het getal is opgemaakt als een tekenreeks, wordt de verwachte waarde mogelijk niet weergegeven.
Als u deze effecten wilt minimaliseren, moet u de dichtstbijzijnde overeenkomst gebruiken tussen numerieke typen die voor u beschikbaar zijn. Als u bijvoorbeeld met SQL Server werkt, kan de exacte numerieke waarde veranderen als u een Transact-SQL-waarde van een echt type converteert naar een waarde van floattype. In .NET Framework kan het converteren van een Single naar een Double ook onverwachte resultaten opleveren. In beide gevallen is een goede strategie om ervoor te zorgen dat alle waarden in de toepassing hetzelfde numerieke type gebruiken. U kunt ook een decimaal type met vaste precisie gebruiken of getallen met drijvende komma casten naar een decimaal type met vaste precisie voordat u ermee werkt.
Als u problemen met gelijkheidsvergelijking wilt omzeilen, kunt u overwegen uw toepassing te coderen, zodat variaties in de minst significante cijfers worden genegeerd. In plaats van bijvoorbeeld te vergelijken om te zien of twee getallen gelijk zijn, trekt u één getal af van het andere getal. Als het verschil binnen een acceptabele afrondingsmarge valt, kan uw toepassing de getallen behandelen alsof ze hetzelfde zijn.