Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 18
  1. #1

    [SQLServer] Gestire 3 decimali dopo la virgola in una funzione

    Buon pomeriggio ragazzi.
    Allora, ho questo problema:
    ho creato una funzione che effettua una divisione qualora i due valori che gli passo siano diversi da zero, altrimenti mi restituisce zero. Tutto funzionerebbe alla perfezione se non fosse che ho bisogno di 3 decimali dopo la virgola mentre la mia funzione, nonostante gli passi numeri con più di 3 decimali, me ne restituisce sempre due.
    Come faccio a farla funzionare come si deve?
    codice:
    CREATE FUNCTION fn_Dividi
           (@Dividendo MONEY = 0.00, @Divisore MONEY = 0.00)
    
    RETURNS MONEY AS  
    
    BEGIN	
    
      DECLARE @Risultato MONEY
    	
      IF @Dividendo = 0.00 OR @Divisore = 0.00
          BEGIN
    	  SET   @Risultato = 0.00
          END
      ELSE 
          BEGIN
    	   SET   @Risultato = @Dividendo / @Divisore
          END
    
    
      RETURN @Risultato
    
    END
    Grazie a tutti

    05.08.2005 - by alka
    Auguri all'angelo custode dei moderatori.

  2. #2
    Utente di HTML.it L'avatar di darkblOOd
    Registrato dal
    Jul 2001
    Messaggi
    2,212
    forse perchè il tipo di dato money ha solo 2 decimali?

    prova a cambiare il tipo di dato e se ti servono 3 soli decimali guarda la funzione ROUND


  3. #3
    veramente, e cito testualmente dalla guida:

    money e smallmoney
    Tipi di dati di valuta per la rappresentazione di valori monetari o valutari.

    money

    Valori dei dati di valuta compresi tra -2^63 (-922.337.203.685.477,5808) e
    2^63 - 1 (+922.337.203.685.477,5807) con una precisione di un decimillesimo dell'unità monetaria. Le dimensioni di archiviazione sono pari a 8 byte.

    smallmoney

    Valori dei dati di valuta compresi tra - 214.748,3648 e +214.748,3647, con una precisione di un decimillesimo dell'unità monetaria. Le dimensioni di archiviazione sono pari a 4 byte.


    e poi

    Dati di tipo valuta
    I dati di tipo valuta rappresentano importi positivi o negativi in valuta. In Microsoft® SQL Server™ 2000 i dati di tipo valuta vengono archiviati utilizzando i tipi di dati money e smallmoney. I dati di tipo valuta possono essere archiviati con al massimo quattro cifre decimali. Utilizzare il tipo di dati money per archiviare valori nell'intervallo da -922.337.203.685.477,5808 a 922.337.203.685.477,5807 (richiede 8 byte di archiviazione per valore). Utilizzare il tipo di dati smallmoney per archiviare valori nell'intervallo da -214.748,3648 a 214.748,3647 (richiede 4 byte di archiviazione per valore). Se è necessario un numero maggiore di posizioni decimali, utilizzare il tipo di dati decimal.


    :master:


    cmq do un occhio a ROUND

    05.08.2005 - by alka
    Auguri all'angelo custode dei moderatori.

  4. #4
    Utente di HTML.it L'avatar di darkblOOd
    Registrato dal
    Jul 2001
    Messaggi
    2,212
    scusa ma perchè nella dichiarazione della funzione dici che le variabili sono = a 0.00? :master:

    devi valorizzarle per forza?

    e se provi a valorizzarle = 0.000 che succede?

  5. #5
    già fatto, non va... non gli piace proprio...
    e non va nemmeno se tolgo l' = 0.00

    05.08.2005 - by alka
    Auguri all'angelo custode dei moderatori.

  6. #6
    Utente di HTML.it L'avatar di darkblOOd
    Registrato dal
    Jul 2001
    Messaggi
    2,212
    io ho provato a fare la divisione tra 2 tipi di dati definiti come money e mi li tratta con 4 decimali

    la round cmq non va bene visto che ti arrotonda al decimale n specificato (es.: Round(123.3456,3) restituisce 123.3460)

    cmq non capisco perchè te ne restituisce 2 decimali, dovrebbe restituirne 4

  7. #7
    appunto, non lo capisco nemmeno io

    05.08.2005 - by alka
    Auguri all'angelo custode dei moderatori.

  8. #8
    Utente di HTML.it L'avatar di darkblOOd
    Registrato dal
    Jul 2001
    Messaggi
    2,212
    Originariamente inviato da ladyBlu
    appunto, non lo capisco nemmeno io
    mo ti faccio incazzare:
    ho fatto copia/incolla della tua funzione sul mio db SQL e l'ho chiamata da QueryAnalyzer...qualsiasi valore passo mi restituisce un risultato con 4 decimali

    Dipende dal tipo di dato, quello money ha 4 decimali

    ma sei sicura che te ne restituisce 2 di decimali?

  9. #9
    Utente di HTML.it L'avatar di darkblOOd
    Registrato dal
    Jul 2001
    Messaggi
    2,212
    ho risolto così:

    mi sono creato un tipo di dato definito dall'utente (cioè me ) con
    codice:
    exec sp_addtype NomeTipo, 'decimal(n1,n2)'
    dove:
    NomeTipo:
    è il nome che vuoi dare al nuovo tipo dati

    decimal:
    è il tipo di dato da cui partire

    n1:
    Numero intero non negativo che indica il numero massimo di cifre che è possibile archiviare, sia a sinistra che a destra del separatore decimale

    n2:
    Numero intero non negativo che indica il numero massimo di cifre che è possibile archiviare a destra del separatore decimale. Deve essere minore o uguale al valore della precisione (n1)

    e poi ho usato questo tipo di dato all'interno della funzione e funziona :gren:

  10. #10
    Originariamente inviato da darkblOOd
    mo ti faccio incazzare:
    ho fatto copia/incolla della tua funzione sul mio db SQL e l'ho chiamata da QueryAnalyzer...qualsiasi valore passo mi restituisce un risultato con 4 decimali

    Dipende dal tipo di dato, quello money ha 4 decimali

    ma sei sicura che te ne restituisce 2 di decimali?
    perchè a te si e a me nooooooooooooo...
    non è giusto...

    05.08.2005 - by alka
    Auguri all'angelo custode dei moderatori.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.