Widziałem dziesiętne używane zamiast int/long w różnych przykładach. Próbuję tylko zrozumieć, dlaczego
Dzieje się tak prawdopodobnie dlatego, że .NET decimal i Oracle NUMBER mapuje trochę lepiej niż long i NUMBER a także zapewnia większą elastyczność. Jeśli na późniejszym etapie dodasz wagę w kolumnie Oracle, nie musisz zmieniać typu danych, jeśli już użyłeś decimal .
decimal jest z pewnością wolniejszy niż int i long ponieważ dwa ostatnie są obsługiwane sprzętowo. To powiedziawszy, musisz przetworzyć poważną ilość danych, aby miało to jakiekolwiek znaczenie. Nadal uważam, że powinieneś używać long jeśli to jest to, z czym masz do czynienia, a następnie powinieneś również pozwolić, aby reprezentowały to definicje kolumn tabeli. NUMBER(18,0) dla long i tak dalej.
Powód decimal mapy trochę lepsze to long to 64 bity i decimal to (coś w rodzaju) 128 bitów.
.NET
Wpisz:dziesiętny
Przybliżony zakres:±1,0 × 10^−28 do ±7,9 × 10^28
Precyzja:28-29 cyfr znaczącychWpisz:długi
Zakres:–9 223 372 036 854 775 808 do 9 223 372 036 854 775 807
Dokładność:18 (19 dla ulong) cyfr znaczących
Wyrocznia
NUMBER domyślnie 38 cyfr znaczących i skala 0 (liczba całkowita).
Wpisz:NUMBER
Zakres:+- 1 x 10^-130 do 9,99...9 x 10^125
Precyzja:38 cyfr znaczących
Microsoft zdaje sobie sprawę z problemu i zauważa
Ten typ danych jest aliasem dla typu danychNUMBER(38) i został zaprojektowany tak, aby OracleDataReader zwracał aSystem.Decimal lub OracleNumber zamiast wartości całkowitej. Użycie typu danych .NETFramework może spowodować przepełnienie.
Pomyśl o tym, że faktycznie potrzebujesz BigInteger aby móc reprezentować tę samą liczbę cyfr znaczących, co NUMBER domyślnie. Nigdy nie widziałem, żeby ktoś to robił i przypuszczam, że to bardzo rzadka potrzeba. Również BigInteger nadal nie wycinałby go, ponieważ NUMBER może mieć nieskończoność dodatnią i ujemną.