Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

DECIMAL(5,5)

136 views
Skip to first unread message

Sy

unread,
May 9, 2003, 10:29:52 AM5/9/03
to
Mi arriva da un programma una quantità in formato stringa del tipo
0000500000
e io lo voglio codificare in 5 salvandolo in una variabile decimal (5,5).
Se ad esempio il numero fosse stato 0000521000 la relativa conversione
sarebbe diventata 5.21...
Avete qualche suggerimento...se non chiedo troppo

Grazie mille a tutti...

Luca Bianchi

unread,
May 9, 2003, 10:52:18 AM5/9/03
to
"Sy" <venomi...@libero.it> wrote in message
news:O98x1djF...@tk2msftngp13.phx.gbl...

> Mi arriva da un programma una quantità in formato stringa del tipo
> 0000500000
> e io lo voglio codificare in 5 salvandolo in una variabile decimal (5,5).

I 2 parametri che identificano un valore decimal sono, rispettivamente, la
precisione e la scala. La precisione è il numero di cifre (interi e
decimali) che rappresentano il valore numerico mentre la scala è il "di cui"
che rappresenta la parte decimale. Pertanto un valore di tipo DECIMAL (5, 5)
sarà in grado di rappresentare valori compresi tra -0.99999 e +0.99999
Suppongo, quindi, che tu voglia convertire il numero in DECIMAL (10, 5)...

> Se ad esempio il numero fosse stato 0000521000 la relativa conversione
> sarebbe diventata 5.21...

Nell'esempio che segue utilizzo la funzione CONVERT per trasformare la
stringa in un valore DECIMAL (10, 0) (ma poteva essere anche un INT)
dopodichè divido il risultato per il valore 100000.00000 dove i 5 zeri dopo
il separatore decimale servono per forzare una conversione implicita.

========================
DECLARE @s CHAR(10)
SET @s = '0000521000'
SELECT CONVERT(DECIMAL(10, 0), @s)/100000.00000

========================

> Avete qualche suggerimento...se non chiedo troppo
>
> Grazie mille a tutti...

Ciao...


--
Luca Bianchi
Microsoft MVP - SQL Server

Sy

unread,
May 30, 2003, 5:50:04 AM5/30/03
to
Ciao Luca,
scusa tanto ma sono di testa moolto duro, ritorno sull'argomento
conversione, e ti ricordo che il mi problema è convertire la stringa
'1001000115' in decimal (10,3) ossia 1°001°000.115 (spero sia capibile). A
seguito di quello che mi hai scritto, ti allego questi 3 batch...

/* 1° batch */
declare @str varchar(10)
set @str='1001000115' ---=> 1001000.115 qta
declare @qta decimal(10,3)
set @qta=convert (int ,@str)/1000.000
print @qta

RISULTATO 1001000.115

poi per curiosità ( o forse perchè non capisco la funzione dei decimali
della cifra 1000.000) provo questo:

/* 2° batch */

declare @str varchar(10)
set @str='1001000115' ---=> 1 qta
declare @qta decimal(10,3)
set @qta=convert (int ,@str)/1000
print @qta

RISULTATO 1001000.000

poi riprovo ancora con questo e ....

/* 3° batch */

declare @str varchar(10)
set @str='1001000115' ---=> 1001000.115 qta
declare @qta decimal(10,3)
set @qta=convert (decimal(10,0) ,@str)/1000
print @qta

RISULTATO 1001000.115

NON ODIARMI NON MANDARMI A QUEL PAESE MA IO NON NE CAPISCO NULLA...
E SOPRATUTTO NON CAPISCO IN CHE COSA MANCO PER NON CAPIRE UNA COSA COSì
SEMPLICE....
SE MI DELUCIDI .... GRAZIE... ALTRIMETI GRAZIE ANCORA....
CIAO
SIMONE

*/
"Luca Bianchi" <rightjoinR...@hotmail.com> ha scritto nel messaggio
news:#vOX#ojFDH...@TK2MSFTNGP12.phx.gbl...

Luca Bianchi

unread,
May 30, 2003, 6:52:06 AM5/30/03
to
"Sy" <venomi...@libero.it> wrote in message
news:efD$ZDpJDH...@TK2MSFTNGP11.phx.gbl...

Nessun problema... ne l'uno ne l'altro... ;-)

> E SOPRATUTTO NON CAPISCO IN CHE COSA MANCO PER NON CAPIRE UNA COSA COSì
> SEMPLICE....
> SE MI DELUCIDI .... GRAZIE... ALTRIMETI GRAZIE ANCORA....
> CIAO
> SIMONE

La seconda soluzione che hai proposto è da scartare poichè come hai visto
arrotonda il valore all'unità e pertanto non soddisfa la tua richiesta.
Prendendo ad esempio quindi il prima oppure il terzo script sei ad un passo
dalla soluzione in quanto ti basta aggiungere i separatori di migliaia per
essere a posto. Personalmente, però, ritengo che questo sia un compito che
debba essere demandato all'applicazione client; il server dovrebbe limitarsi
a restituire i dati al client e quest'ultimo dovrebbe preoccuparsi della
presentazione all'utente in forma più gradevole.
Volendo far svolgere anche questa attività a SQL Server potrebbe essere
opportuno un passo indietro e semplificare la cosa. I tuoi script (1 e 3) da
un punto di vista del risultato vanno già bene così e manca solo la parte
finale che può essere risolta con una serie di funzioni nidificate. Poichè,
però, parti da una stringa di 10 caratteri (giusto?) di cui gli ultimi 3
rappresentano la parte decimale e i rimanenti la parte intera in cui devi
separare le cifre a 3 a 3, puoi scrivere

==========================
DECLARE @s VARCHAR(10),
@s2 VARCHAR(15)

SET @s = '1234567123'
SET @s2 = LEFT(@s, 1) + '.' +
SUBSTRING(@s, 2, 3) + '.' +
SUBSTRING(@s, 5, 3) + ',' +
RIGHT(@s, 3)

PRINT @s2

==========================

E' possibile includere un ulteriore passaggio per eliminare eventuali zeri
non significativi in testa alla stringa.
Per fare questo prima della istruzione PRINT puoi inserire il seguente
controllo

==========================
WHILE LEFT(@s2, 1) IN ('0', '.')
BEGIN
SET @s2 = SUBSTRING(@s2, 2, 15)
END

==========================

0 new messages