Jag har sett decimal användas istället för int/long i olika exempel. Jag försöker bara förstå varför
Det beror förmodligen på att .NET decimal
och Oracle NUMBER
kartor lite bättre än long
och NUMBER
och det ger dig också mer flexibilitet. Om du i ett senare skede lägger till en skala i Oracle-kolumnen skulle du inte behöva ändra datatyp om du redan använde decimal
.
decimal
är säkert långsammare än int
och long
eftersom de två senare stöds i hårdvara. Som sagt, du måste krossa en seriös mängd data för att det ska göra någon skillnad. Jag tycker fortfarande att du ska använda long
om det är det du har att göra med och då bör du också låta tabellkolumndefinitionerna representera det. NUMBER(18,0)
under long
och så vidare.
Orsaken decimal
kartor lite bättre är att long
är 64 bitar och decimal
är (typ) 128 bitar.
.NET
Typ:decimal
Ungefärligt intervall:±1,0 × 10^−28 till ±7,9 × 10^28
Precision:28-29 signifikanta siffrorTyp:lång
Omfång:–9 223 372 036 854 775 808 till 9 223 372 036 854 775 807
Precision:18 (19 för långa) signifikanta siffror
Oracle
NUMBER
standard till 38 signifikanta siffror och skala 0 (heltal).
Skriv:NUMBER
Omfång:+- 1 x 10^-130 till 9,99...9 x 10^125
Precision:38 signifikanta siffror
Microsoft är medveten om problemet och noterar
Denna datatyp är ett alias för datatypen NUMBER(38) och är utformad så att OracleDataReader returnerar ett System.Decimal eller OracleNumber istället för ett heltalsvärde. Användning av datatypen .NETFramework kan orsaka ett överflöde.
När du tänker på det behöver du faktiskt BigInteger
för att kunna representera samma antal signifikanta siffror som till vilket NUMBER
standard till. Jag har aldrig sett någon göra det och jag skulle anta att det är ett mycket sällsynt behov. Även BigInteger
skulle fortfarande inte klippa det sedan NUMBER
kan vara av positiv och negativ oändlighet.