2 messaggi dal 09 novembre 2001
hello a tutta la ML

E' da non credere però succede ... e io non capisco il perchè.

Sql Server 2000con impostazioni in lingua italiana.
Una tabella TAB1 con un campo EMISSIONE definito di tipo FLOAT e un campo chiave ID di tipo autonumber.

Una stored procedure che fa una insert e restituisce l'ID del record inserito
-----------------
CREATE PROCEDURE sp_INS_EMISSIONI
@ID int OUTPUT,
@EMISIONEfloat
BEGIN
insert TA_DICH_EMISSIONI
(EMISSIONE
)
values
(
@EMISSIONE,
)
SELECT @ID = @@IDENTITY
END
------------------

Chiamo questa stored procedure in una pagina asp passandogli il parametro dell'emissione

--------------
set CNX = Server.CreateObject("ADODB.Connection")
...
dim CMD_x
dim VA_EMI
set CMD_x = Server.CreateObject("ADODB.Command")
CMD_x.CommandType = adCmdStoredProc
CMD_x.CommandTimeout = 15
set p = CMD_x.Parameters

CMD_x.CommandText = "sp_INS_EMISSIONI"
p.Append CMD_x.CreateParameter("@ID",adInteger,adParamOutput,4)
p.Append CMD_x.CreateParameter("@EMISSIONE",adDoublet,adParamInput,8)

CMD_x("@EMISSIONE")=VAL_EMI
CMD_x.ActiveConnection = Cnx
CMD_x.Execute
descr = CMD_x("@ID")
--------------

Se VAL_EMI è un numero senza virgola nel Database trovo esattamente quel valore oppure se lo scrivo con la virgola ma mettendo zero nelle cifre decimal.
Invece, e qui sta l'inghippo, se scrivo un numero con dei decimali nel database viene scritto un numero diverso
ad esempio scrivo 333,1 e mi ritrovo 333.10000000000002
Notate che è scritto CON IL PUNTO NON CON LA VIRGOLA.

L'errore è evidente solo se uso il QUERY ANALIZER e faccio le select sulla tabella TAB1 mentre se uso enterprise manager l'errore non si vede perchè i numeri sono rappresentati in formato italiano cioè con la virgola e solo 2 cifre decimali.

Sempre adoperando il Query analizer ho provato ad eseguire direttamente la stored procedure: stesso risultato.
Ultima prova che ho fatto mi ha lasciato di sasso:
ho eseguito la query di insert scritta dentro la stored procedure sempre su Query Analizer.
-------
insert TAb1
(emissione)
values
(
333.1
)
-------
Ebbene non ci crederete ma nella tabella è stato inserito il valore Scorretto 333.10000000000002

Secondo voi è un baco non noto delle conversioni implicite della Microsoft o, più probabilmente, sono io a fare qualche errore?

Ciao

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.