que he visto decimal usado en lugar de int/larga en varios ejemplos. Sólo estoy tratando de entender por qué
Eso es probablemente porque .NET decimal
y Oracle NUMBER
maps a bit better de long
y NUMBER
y también le da más flexibilidad. Si en una etapa posterior agrega una escala en la columna Oracle, entonces no tendría que cambiar el tipo de datos si ya usó decimal
.
decimal
es ciertamente más lento que int
y long
ya que los dos últimos son compatibles con el hardware. Dicho esto, tienes que procesar una gran cantidad de datos para que haga una diferencia. Sigo pensando que debe usar long
si eso es lo que está tratando y luego también debe dejar que las definiciones de columna de la tabla lo representen. NUMBER(18,0)
para long
y así sucesivamente.
La razón decimal
mapas un poco mejor es que long
es de 64 bits y decimal
es (tipo de) 128 bits.
.NET
Tipo: decimal
intervalo aproximado: ± 1,0 × 10^-28 a ± 7,9 × 10^28
de precisión: 28-29 dígitos significativos
Tipo: largo
Rango: -9,223,372,036,854,77 5.808 a 9,223,372,036,854,775,807
Precisión: 18 (19 para ulong) dígitos significativos
Oracle
NUMBER
defaults a 38 dígitos significativos y la escala de 0 (entero).
Tipo: NÚMERO
Rango: + - 1 x 10^-130-9,99 ...9 x 10^125
de precisión: 38 dígitos significativos
Microsoft es consciente del problema y notes
Este tipo de datos es un alias para el NÚMERO (38) de tipo de datos, y está diseñado para que OracleDataReader devuelva System.Decimal u OracleNumber en su lugar de un valor entero. El uso del .NET tipo de datos de Framework puede causar un desbordamiento de .
Ahora que lo pienso de ella que realmente necesita BigInteger
a ser capaz de representar el mismo número de dígitos significativos en cuanto a lo NUMBER
por defecto. Nunca he visto a nadie hacer eso y supongo que es una necesidad muy rara. También BigInteger
todavía no lo cortaría ya que NUMBER
puede ser de infinito positivo y negativo.
¿Qué quiere decir con "¿Cuáles son las ventajas de decimal más int/tiempo? ¿Tiene que funcionan mejor?", Decimales no son números enteros como int/larga ... – Phill
@Phill Sin embargo, un número decimal * * puede ** representar un número entero, y he visto 'decimal' utilizado en lugar de' int'/'long' en varios ejemplos. Solo estoy tratando de entender por qué. –