Convertir de decimal a money

29/06/2005 - 12:47 por Pedro | Informe spam
Hola a todos, estoy intentando hacer esta conversión: Money = Decimal(14,6)
* Int, pero me da el siguiente error "Error de desbordamiento aritmético al
convertir numeric al tipo de datos numeric" ¿alguien sabe porque hace esto?,
se que perdería presición, pero no importa. he probado con cast y convert,
pero sin resultado.


Gracias, Un saludo Pedro.

Preguntas similare

Leer las respuestas

#1 Maxi
29/06/2005 - 14:10 | Informe spam
Hola, proba de convertirlo a decimal (9,6) por ej


Salu2
Maxi


"Pedro" escribió en el mensaje
news:
Hola a todos, estoy intentando hacer esta conversión: Money =
Decimal(14,6) * Int, pero me da el siguiente error "Error de
desbordamiento aritmético al convertir numeric al tipo de datos numeric"
¿alguien sabe porque hace esto?, se que perdería presición, pero no
importa. he probado con cast y convert, pero sin resultado.


Gracias, Un saludo Pedro.

Respuesta Responder a este mensaje
#2 Alejandro Mesa
29/06/2005 - 15:55 | Informe spam
Pedro,

Cuando usas variables o columnas de tipo "decimal" en una expresion
aritmetica donde los operandos son decimal o de tipo con menor precedencia,
entonces el resultado sera decimal pero la precision y escala sera de acuerdo
con la formula que aparece en los libros en linea bajo el encabezamiento
"Precision, Scale, and Length".
Si el resultado es un valor que sobrepasa el maximo valor que puedes
almacenar en una variable tipo money (decimal(18, 4)) entonces al convertir
ese valor a money, sql server dara un error de overflow.

Puedes saber cual sera la precision y escala del resultado si conviertes el
resultado a varbinary, el primer byte es la precision y el segundo es la
escala. En el ejemplo siguiente, veras que la precision y escala de la
multiplicacion sera decimal(25, 6), y este tipo puede almacenar valores que
sobrepasan el valor maximo de decimal(18, 4).


Ejemplo:

declare @d decimal(14, 6)
declare @i int

set @d = 23456789.123456
set @i = 100000000

select
@d * @i,
cast(@d * @i as varbinary) as binRep,
cast(substring(cast(@d * @i as varbinary),1,1) as tinyint) as prec,
cast(substring(cast(@d * @i as varbinary),2,1) as tinyint) as scale
go

Result:

binRep
prec scale

2345678912345600.000000 0x19060001008021BCD68ED5287F000000
25 6

(1 row(s) affected)

si tratas de convertir ese valor a money, obtendras un error:

select cast(cast(2345678912345600.000000 as decimal(25, 6)) as money)
go

Result:

Server: Msg 8115, Level 16, State 4, Line 1
Arithmetic overflow error converting numeric to data type money.


AMB

"Pedro" wrote:

Hola a todos, estoy intentando hacer esta conversión: Money = Decimal(14,6)
* Int, pero me da el siguiente error "Error de desbordamiento aritmético al
convertir numeric al tipo de datos numeric" ¿alguien sabe porque hace esto?,
se que perdería presición, pero no importa. he probado con cast y convert,
pero sin resultado.


Gracias, Un saludo Pedro.



email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida