Newsgroup: it.comp.appl.access
Titolo: Come arrotondo in MSDE?

Mi sono accorto che la funzione round di sqlserver o msde non arrotonda in
modo commerciale,
esiste un'altra funzione o qualcuno ne ha scritta una?
Ciao, AEOM

"All Eyez On me" <in...@FUCK-LAMERbfsistemi.com> ha scritto nel messaggio
news:agwua.121481$K35.2...@news2.tin.it...

Hai provato a dare un'occhiata alla funzione di Karl pubblicata nella
Sezione General del Sito Comune?
-- 
Roberto
---------------------------------------------
il Sito Comune di it.comp.appl.access:
http://www.sitocomune.com
---------------------------------------------

 ha scritto nel messaggio
news:WIwua.102029$iy5.3...@twister2.libero.it...

forse non mi sono spiegato,
mi serve la funzione da usare dentro una query, da codice quella di karl va
benissimo ma non so come "tradurla" per MSDE.
Ciao, AEOM

"All Eyez On me" <in...@FUCK-LAMERbfsistemi.com> ha scritto nel messaggio
news:agwua.121481$K35.2...@news2.tin.it...

Ciao AEOM
Come sarebbe a dire che non arrotonda in modo commerciale ??????
Puoi fare un esempio specificando il tipo di dato utilizzato ?
Ciao Giorgio.

 ha scritto nel messaggio
news:b9e8fu$nqd$1...@lacerta.tiscalinet.it...

round(Importo totale(money)* aliquota(int)/100;2)
con i numeri: 17.04*10/100=1.71 anzichč 1.70
Ciao AEOM

"All Eyez On me" <in...@FUCK-LAMERbfsistemi.com> ha scritto nel messaggio
news:fdIua.65663$3M4.1...@news1.tin.it...

Ciao AEOM
Da dove esegui la query?
Fai questa prova con Query Analyzer
--Creo una tabella di prova
Create Table Tb10 (Totale money,Aliquota int)
GO
--Creo la vista
CREATE VIEW Tb10_Tot AS
SELECT round(Totale* aliquota/100,2) Tot,
       Totale,Aliquota
FROM Tb10
GO
--Inserisco i valoriu nella tabella
INSERT Tb10 VALUES(17.04,10)
--Eseguo la select sulla View
Select Tot, Totale*Aliquota/100 Tot1 From Tb10_Tot
--Pulizia
DROP VIEW Tb10_Tot
DROP Table Tb10
--Risultato
Tot                   Tot1
--------------------- ---------------------
               1.7000                1.7040
(righe interessate: 1)
Come puoi vedere il risultato arrotondato č 1.7000 e quello non arrotondato
č 1.7040.
Forse utilizzi una query di access che agisce su tabelle collegate via ODBC?
In questo caso viene utilizzato il Round di Access e non di Sql server.
Ciao Giorgio.


Effettivamente se faccio come dici tu funziona ma nel mio caso no
la vista che ho e composta da idfattura, totaleimporti(somma degli importi
totali del corpo fattura di tipo money), aliquota, e
imposta=round(totaleimporti*aliquota/100;2)
il risultato della vista è: 152(idfattura)  10,70(totaleimporti)
10(aliquota)   1.71(imposta)
Cacchio sono disperato devo controllare tutto il programma di contabilità
che ho convertito da access a msde
ciao, AEOM


Ciao AEOM
Tempo fa ho adattato la mia funzione di arrotondamento x access in T_SQL  ma
poi mi sono accorto che non serviva a nulla in quanto ROUND funzionava
benissimo.
Fai una prova con la funzione che ti posto, ma penso che il risultato non
cambierà in quanto il problema è di altra natura.
Per utilizzare la funzione cambia la riga
round(totaleimporti*aliquota/100;2)
in
dbo.ufn_Arrotonda(totaleimporti*aliquota/100;2)
--
****************************************************************************
*******
-- Arrodonda il @Numero in ingresso al numero decimali passati in @decimali
secondo il
-- metodo indicato dal comitato per l'EURO
-- La funzione rende MAX 8 decimali
--
****************************************************************************
*******
CREATE  FUNCTION ufn_Arrotonda (@Numero decimal(28,8), @Decimali int)
RETURNS decimal (28,8)
AS
BEGIN
    DECLARE @Result decimal(28,8)                  --Risultato
    SET @Decimali=ISNULL(@Decimali,2.00)           -- Controllo sul numero
dei decimali
    IF @Decimali>8 SET @Decimali=8                 --
    SET @Numero=ISNULL(@Numero,0.00)               --
    SET @Result=ABS(@Numero)                       --Tolgo il segno al
numero in ingresso
    SET @Result=@Result * POWER(10,@Decimali)      --Lo moltiplico x
10^decimali
    SET @Result=@Result+0.5                        --Sommo 0,5
    SET @Result=Round(@Result,0,-1)                --Tronco i decimali senza
arrotondare
    SET @Result=@Result / POWER(10,@Decimali)      --Lo divido x 10^decimali
    SET @Result=@Result * SIGN(@Numero)            --Riassegno il segno
tolto in precedenza
    RETURN @Result
END
Per curiosità puoi postare la lista degli importi da sommare completi di
tutti i 4 decimali previsti da money ?
Ciao Giorgio


Ho risolto ho fatto un mega errore io, nella query che mi ragruppava gli
importi totali avevo scritto
round(importototale*aliquota/100;2)    e su tipo raggruppamento avevo messo
"somma"
modificando con :
round(sum(importototale*aliquota/100);2) e su tipo ragruppamento mettendo
"espressione"
tutto funziona
praticamente calcolavo l'imposta ad ogni riga della fattura e poi la
sommavo, fregandomi con gli arrotondamenti di ogni riga
grazie mille, ciao
AEOM


Se posso permettermi di darti un consiglio
Abituati a scrivere le query le viste le stored ecc senza il supporto
grafico offerto da Access, eviterai questo tipo di errore e scoprirai una
gamma pių ampia di possibilitā per scrivere una query.
Ciao Giorgio.


Stesso consiglio che mi davano all'università....ma sai la pigrizia non ha
limiti
grazie, AEOM