Megosztás a következőn keresztül:


Lebegőpontos számok

Ez a témakör azokat a problémákat ismerteti, amelyekkel a fejlesztők gyakran találkoznak, amikor lebegőpontos számokkal dolgoznak ADO.NET. Ezeket a problémákat az okozza, hogy a számítógépek lebegőpontos számokat tárolnak, és nem egy adott szolgáltatóra, például System.Data.SqlClient vagy System.Data.OracleClient.

A lebegőpontos számok általában nem rendelkeznek pontos bináris ábrázolásokkal. Ehelyett a számítógép a szám közelítését tárolja. A szám különböző időpontokban különböző bináris számjegyek számával jelölhető. Ha egy lebegőpontos számot egy reprezentációból egy másik ábrázolásba konvertál, a szám legkisebb jelentős számjegyei kissé eltérhetnek. Az átalakítás általában akkor történik, ha a szám egy típusból egy másik típusba kerül. A variáció akkor fordul elő, ha az átalakítás egy adatbázisban, adatbázisértékeket képviselő típusok vagy típusok között történik. Ezen változások miatt a logikailag egyenlő számoknak a legkisebb jelentős számjegyeikben is lehetnek olyan változások, amelyek miatt eltérő értékekkel rendelkeznek. A pontosságú számjegyek száma a számban nagyobb vagy kisebb lehet a vártnál. Ha sztringként van formázva, előfordulhat, hogy a szám nem jeleníti meg a várt értéket.

Ezeknek az effektusoknak a minimalizálása érdekében az elérhető numerikus típusok közötti legközelebbi egyezést kell használnia. Ha például az SQL Serverrel dolgozik, a pontos numerikus érték megváltozhat, ha valós típusú Transact-SQL-értéket konvertál lebegőpontos típussá. A .NET-keretrendszer a konvertálás Single Double nem várt eredményeket is eredményezhet. Mindkét esetben jó stratégia, hogy az alkalmazás összes értéke ugyanazt a numerikus típust használja. Használhat rögzített pontosságú decimális típust is, vagy a lebegőpontos számokat rögzített pontosságú decimális típusra is leadhatja, mielőtt velük dolgozik.

Az egyenlőségi összehasonlítással kapcsolatos problémák megoldásához fontolja meg az alkalmazás kódolását, hogy a legkevésbé jelentős számjegyek variációit figyelmen kívül hagyja. Például ahelyett, hogy összehasonlítanál, hogy két szám egyenlő-e, vonjon ki egy számot a másik számból. Ha a különbség a kerekítés elfogadható margóján belül van, az alkalmazás úgy kezelheti a számokat, mintha azonosak lennének.

Lásd még