J'ai vu décimal utilisé à la place de int/long dans divers exemples. J'essaie juste de comprendre pourquoi
C'est probablement parce que .NET decimal
et Oracle NUMBER
cartes un peu mieux que d' long
et NUMBER
et il vous donne également plus de flexibilité. Si, à un stade ultérieur ajoute une certaine échelle dans l'Oracle de la colonne, alors vous n'avez pas à changer de type de données si vous avez déjà utilisé decimal
.
decimal
est certainement plus lent que l' int
et long
depuis le plus tard est pris en charge par le matériel. Cela dit, vous devez rassembler montant considérable de données pour faire une différence. Je pense toujours que vous devez utiliser long
si ce que vous avez à traiter avec, puis vous devriez également le tableau des définitions de colonne représentent qu'. NUMBER(18,0)
pour long
et ainsi de suite.
La raison en decimal
cartes un peu mieux, c'est qu' long
64 bits et decimal
est (un peu) de 128 bits.
.NET
Type: décimal
La Gamme approximative: ±1.0 × 10^-28 à ±7.9 × 10^28
Précision: 28-29 chiffres significatifs
Type: long
Gamme: -9,223,372,036,854,775,808 à 9,223,372,036,854,775,807
Précision: 18 (19 pour ulong) chiffres significatifs
Oracle
NUMBER
valeurs par défaut à 38 chiffres significatifs et une échelle de 0 (entier).
Type: NUMÉRO de
Plage: +- 1 x 10^-130 à 9.99...9 x 10^125
Précision: 38 chiffres significatifs
Microsoft est conscient du problème et des notes
Ce type de données est un alias de la
NOMBRE(38) type de données, et est conçu
de sorte que le OracleDataReader renvoie une
Système.Décimal ou OracleNumber au lieu
d'une valeur entière. À l'aide de l' .NET
Cadre type de données, il peut provoquer une
dépassement de capacité.
Venez pour penser à elle vous avez réellement besoin d' BigInteger
à être en mesure de représenter le même nombre de chiffres significatifs à ce qu' NUMBER
par défaut. Je n'ai jamais vu personne le faire et je suppose que c'est un très rare de besoin. Aussi BigInteger
n'est pas coupé depuis NUMBER
peuvent être positifs et négatifs de l'infini.