Visualizzazione dei risultati da 1 a 9 su 9

Discussione: potenze da asp a t-sql

  1. #1
    Utente di HTML.it L'avatar di Ashry
    Registrato dal
    Jul 2002
    Messaggi
    586

    potenze da asp a t-sql

    come faccio a convertire questo ((1+6/100)^(0.8/0.1)) in modo corrretto?

    mi spiego meglio; io in query analizer scrivo power((1+6/100),(0.8/0.1)) in teoria dovrebbe essere giusto no? però se eseguo la pagina asp il risultato è 1.59 mentre in query analyzer mi da 2 io ho bisogno dei decimali, come devo fare?

    Grazie

  2. #2
    In informatica generalmente i tipi di dato vanno dichiarati, altrimenti di default viene assegnato il tipo di dato che più si avvicina al numero che hai scritto.
    In una frazione comanda il numeratore, che è quello sul quale vai ad operare. Se il numeratore è un intero, il risultato è un intero. Se il denominatore è un float, il risultato è un float.

    per esempio:
    1 / 2 --restituisce 0
    1.1 / 2 restituisce 0.55

    La cosa migliore secondo me nel tuo caso è castare sempre i numeratori al formato finale che vuoi ottenere, quindi per ex:
    codice:
    PRINT POWER(1 + CAST(6 AS DECIMAL(10,9)) / 100, CAST(0.8 AS DECIMAL(10,9)) / 0.1)
    edit:
    Un'alternativa potrebbe essere rendere decimal i numeri che ti interessano aggiungendo un .0, ma in questo caso la precisione dei decimali è scelta dal db e non da te.
    ex
    codice:
    PRINT POWER(1.0 + 6.0 / 100, 0.8 / 0.1)
    xxx

  3. #3
    Utente di HTML.it L'avatar di Ashry
    Registrato dal
    Jul 2002
    Messaggi
    586
    la cosa però non funziona se prendo i dati da una tabella
    tipo se il 6 lo prendo da un campo che si chiama dato ed è di tipo float mentre 0.8 lo passo da form?


    @Dato2 AS DECIMAL(10,9)


    POWER(1+cast(dato as decimal(10,9)) / 100, @Dato2 / 0.1)FROM TABELLA WHERE CONDOZIONE

    non è la stessa cosa?

  4. #4
    Utente di HTML.it L'avatar di Ashry
    Registrato dal
    Jul 2002
    Messaggi
    586
    niente ho trovato l'inghippo mi ero dimenticata di mettere un decimal

    DECLARE @var AS DECIMAL(10,2)

    select @var = POWER(1+cast(dato as decimal(10,9)) / 100, @Dato2 / 0.1)FROM TABELLA WHERE CONDOZIONE

    ^-^

    Grazie per la spiegazione è stata molto utile

  5. #5
    ehm.. non ho capito cosa stai cercando di dirmi..
    puoi fare il casting assegnando un valore ex int ad una variabile dichiarata double (in c per esempio invece una cosa del genere non funzia, ma in ss2005 pare di si, cmq prova e fai attenzione)

    codice:
    DECLARE
    	@dato1 AS DECIMAL(10,9),
    	@dato2 AS DECIMAL(10,9)
    BEGIN
    	SET @dato1 = 6
    	SET @dato2 = 0.8
    	PRINT POWER(1 + @dato1 / 100, @dato2 / 0.1)
    END
    se hai come input solo dato2 puo' andar bene:

    codice:
    DECLARE
    	@dato2 AS DECIMAL(10,9)
    BEGIN
    	SET @dato2 = 0.8
    	SELECT 
    		POWER(1 + CAST(dato AS DECIMAL(10,9)) / 100, @dato2 / 0.1)
    	FROM
    		tuaTabella
    	WHERE
    		condizione
    END
    xxx

  6. #6
    Originariamente inviato da Ashry
    niente ho trovato l'inghippo mi ero dimenticata di mettere un decimal

    DECLARE @var AS DECIMAL(10,2)

    select @var = POWER(1+cast(dato as decimal(10,9)) / 100, @Dato2 / 0.1)FROM TABELLA WHERE CONDOZIONE

    ^-^

    Grazie per la spiegazione è stata molto utile
    ops, non avevo visto che avevi già replicato

    xxx

  7. #7
    Utente di HTML.it L'avatar di Ashry
    Registrato dal
    Jul 2002
    Messaggi
    586
    Niente non riesco a fare delle operazioni più complesse provo a postarti i codici reali


    /* Dichiaro la variabile */
    DECLARE @Pressione AS DECIMAL(10,8)
    DECLARE @Portata AS NUMERIC
    DECLARE @Dens AS DECIMAL(10,8)

    DECLARE @velocita AS numeric

    /* Inizializzo la variabile */

    SET @Pressione = 0.8
    SET @Portata = 100
    SET @Dens = 1.19

    /* Recupero il valore e lo assegno con una istruzione SELECT */
    SELECT @velocita = (1235/Ve)*(POWER(@Portata/60+ POWER((1+porc/100),(@Pressione/0.1))*2*Vf*(1.293*@Pressione*1000/(@Dens*100)),0.5)) FROM tipi WHERE Tipo = 'tipo.1'

    /* Stampo il valore che ho precedentemente recuperato */

    PRINT @velocita


    dalla tabella:
    Vf = campo float con valore 0,185
    Ve = campo float con valore 0,9633
    porc = campo float con valore 6


    in asp scrivo Round(((1235/Ve)*(caudal/60+((1+porc/100)^(Pressione/0.1))*2*Vf*(1.293*Pressione*1000/(Dens*100))^0.5)),0) e il risultato è 4366

    perchè con query analyzer mi viene 3341?

  8. #8
    Utente di HTML.it L'avatar di Ashry
    Registrato dal
    Jul 2002
    Messaggi
    586
    Risolto avevo sbagliato la posizione di un power

  9. #9


    ciao

    xxx

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 © 2026 vBulletin Solutions, Inc. All rights reserved.