Виждал съм да се използва десетичен вместо int/long в различни примери. Просто се опитвам да разбера защо
Това вероятно е защото .NET decimal и Oracle NUMBER карти малко по-добре от long и NUMBER и също така ви дава повече гъвкавост. Ако на по-късен етап добавете скала в колоната на Oracle, тогава не би трябвало да променяте типа данни, ако вече сте използвали decimal .
decimal със сигурност е по-бавен от int и long тъй като последните две се поддържат хардуерно. Това каза, че трябва да счупите сериозно количество данни, за да има някаква разлика. Все още мисля, че трябва да използвате long ако това е, с което се занимавате и тогава трябва също да оставите дефинициите на колоните на таблицата да представят това. NUMBER(18,0) за long и така нататък.
Причината decimal карти малко по-добре е, че long е 64 бита и decimal е (вид) 128 бита.
.NET
Тип:десетичен
Приблизителен диапазон:±1,0 × 10^−28 до ±7,9 × 10^28
Прецизност:28-29 значими цифриТип:дълго
Обхват:–9,223,372,036,854,775,808 до 9,223,372,036,854,775,807
Прецизност:18 (19 за дълги) значими цифри
Оракул
NUMBER по подразбиране е 38 значими цифри и мащаб 0 (цяло число).
Въведете:NUMBER
Обхват:+- 1 x 10^-130 до 9,99...9 x 10^125
Прецизност:38 значими цифри
Microsoft е наясно с проблема и отбелязва
Този тип данни е псевдоним за типа данни NUMBER(38) и е проектиран така, че OracleDataReader да връща aSystem.Decimal или OracleNumber вместо целочислена стойност. Използването на типа данни .NETFramework може да причини преливане.
Като се замисля, всъщност се нуждаете от BigInteger за да можете да представите същия брой значими цифри като това, което NUMBER по подразбиране. Никога не съм виждал някой да прави това и предполагам, че това е много рядка нужда. Също така BigInteger все още не би го отрязал от NUMBER може да бъде с положителна и отрицателна безкрайност.