Newsgroup: it.comp.lang.visual-basic
Titolo: [!] Euro

=10
- arrotondamento a 3 cifre decimali se il valore originale in lire è < 1000
e >=100
- arrotondamento a 2 cifre decimali se il valore originale in lire è >= 1000
Attenzione: la regola precedente era: mantenere SEMPRE un numero di cifre
decimali MINIMO di due ed un numero di CIFRE SIGNIFICATIVE pari a sei ed è
ancora valida, come potete constatare confrontandola con quella dello
schemino.
3) La regola precedente si applica SOLAMENTE laddove esista un accordo
preciso stipulato in lire (per accordo si intende un documento legalmente
rilevante: contratto, ordine...) perché ovviamente tutti gli importi che
nascono in Euro e non sono la conversione di importi (preesistenti) in lire
vanno gestiti con DUE CIFRE DECIMALI secondo la regola 1).
In altre parole la regola uno vale solo per la transizione fra le valute.
4) La regola due implica che tutti gli escamotage tipo aumento delle
quantità dei lotti venduti (per bypassare il problema dei decimali in più da
considerare) va eseguito solo considerando attentamente che non vengano
violati gli eventuali accordi (contratti, ordini, ecc...) già in essere.
Attenzione!
5) E veniamo al VB: la funzione Round per quanto riguarda l'Euro NON
funziona correttamente perché approssima secondo regole diverse, NONOSTANTE
quanto dichiarato dalla microsoft (vedere l'ultima NewsLetter distribuita
per Office e MSDN). Attenzione ad usarla "cum grano salis"...
HTH
Carlo.

 per Office e MSDN). Attenzione ad usarla "cum grano salis"...
Ok, chi scrive una EuroRound() che funzioni con le sopracitate regole? :)
Ciao

io ho fatto un ocx, txtEuro che perň serve solo per l'immissione e non fa
alcuna approssimazione.
funziona cosě:
č un textbox che accetta solo numeri virgola (o punto) e al massimo due cifre
dopo la virgola o il punto.
se non si mette virgola o punto viene aggiunto automaticamente ,00
se č stato messo il punto questo viene trasformato in virgola. (per me il
separatore č sempre la virgola e non mi interessa il. separatore delle
migliaia)
il valore reale viene mantenuto in una variabile cosě da non avere problemi di
separatore.
se perň scrivo 123456, e poi torno indietro e metto una virgola o un punto (es
12,3456) automaticamente si tronca la parte decimale e rimangono solo le prime
due cifre.  (12,34)
avrei voluto che si approssimasse il valore da troncare ma visto che č un po
complessino e l'ocx serve solo per l'immissione non l'ho fatto
comunque se qualcuno lo ritiene utile lo do con piacere.
se poi vogliamo integrarlo con  roundEuro va bene lo stesso

 avrei voluto che si approssimasse il valore da troncare ma visto che è un


 Ok, chi scrive una EuroRound() che funzioni con le sopracitate regole? :)
Io uso questa:
Public Function EuroRound(n As Double, ndec As Integer) As Double
Dim TempN As Double
Dim TempD As Single
Dim TempI As Long
Dim ToAdd As Integer
Dim mystr As String
    TempN = n * 10 ^ ndec                             'lo fo grosso
    TempI = Fix(TempN)                               'recuepro l'intero
    TempD = (TempN - TempI)                             'e i decimali
    If TempD >= 0.5 Then ToAdd = 1 Else ToAdd = 0        'se c'e' un resto
di più di 0,5...
    TempN = (TempI + ToAdd)
    EuroRound = TempN * 0.1 ^ (ndec)
End Function
dovrebe dare risultati corretti, ma ultimamente mi sento un po' confuso
circa l'euro :-)
Provatela e ditemi se funzia (attenzione ai tipi di dato: se usate tutti
double fa un po' di trasando... e se qualcuno mi spiega perché ne sarei
felice )

schemino.
Errore!!! Cosa ho vinto?
Il numero di cifre per indicare il valore in Euro e' 6 (per gli enti
riscossori di tasse o simili)
Anche per £ 1000 si usa scrivere € 0,51646
£. 100.000 = € 51,6457
In pratica dipende dal risultato e non dal valore in lire che si sta
per convertire)
Documentazione acquisita dal sito del Ministero del Tesoro!

 se poi vogliamo integrarlo con  roundEuro va bene lo stesso
Io ti ringrazzierei molto se fossi cosě gentile da inviarmelo by privat mail
sono alle prime armi (studio vb solo per passione)
 e mi servirebbe soprattutto per vedere comč
grazie Marco
Ps: togliere NoSpam dall'indirizzo, grazie

 Documentazione acquisita dal sito del Ministero del Tesoro!
Cioè chi deve pagare, ad esempio, 300 milioni di lire di tasse, in Euro
dovrà scrivere: 154937,069727
Ne deduco che i prossimi moduli Unico e simili li stamperanno in orizzontale
:-P
Non ho voglia di controllare sul sito del Tesoro e resto della mia idea:
sono richieste 6 cifre SIGNIFICATIVE, non 6 cifre decimali assolute.
Detto questo, potrei anche sbagliarmi. Chi lavora con enti tributari ci
illuminerà...
Ciao,
Carlo.

 Ok, chi scrive una EuroRound() che funzioni con le sopracitate regole? :)
Mah, un punto di partenza potrebbe essere:
Public Function RoundEuro(ByVal dNumber As Double, ByVal lDecimal As Long)
As Double
    RoundEuro = CDbl(Format(dNumber, "0." & String(lDecimali, "0")))
End Function
Considerando poi che il numero di cifre decimali da usare č:
Int(Log(Abs(ValoreInLire))/Log(10))
con limite inferiore pari a 2...
Ciao,
Carlo.
P.S. In effetti la Function č molto brutta (sfruttare una doppia conversione
e l'arrotondamento corretto della Format per fare il lavoro sporco č
amorale.;-D)... perň ho testato un paio di funzioni alternative piů eleganti
e in termini di prestazioni non ce n'č per nessuna!..
Ovviamente attendo smentite.

 ha scritto nel messaggio
news:9u7i3u$20k$1...@pegasus.tiscalinet.it...


 P.S.: Non lavoro presso enti tributari ;)
Abbi pazienza, ma non ho trovato, nella sbrodolata di cui al tuo link, il
riferimento alle sei cifre decimali. Sarà perché dopo dieci minuti mi si
sono incrociati gli occhi, ma non potresti estrarre tu per tutti quanti il
comma incriminato?
Grazie,
Carlo.

dovrà scrivere: 154937,069727
No, sei cifre in tutto, unita' di misura + decimali = 6.
In ogni caso la cosa non ci riguarda, sempre che non si sta elaborando
unsoftware per una banca o per un ente pubblico!
Ciao

[...]
 Il Regolamento (CE) n. 1103/97, a sua volta, stabilisce all'articolo 5
le regole   di   arrotondamento che occorre seguire nel caso di conversioni
in
euro o nelle monete nazionali di importi monetari da pagare o
contabilizzare.
        Tali importi,   se   espressi   in  euro, devono essere arrotondati
al
centesimo (che  come sopra detto costituisce l'unita' divisionale minima
della
moneta in  parola), per eccesso, se la frazione non e' inferiore a 0,005
euro,
e, per difetto, se la frazione e' inferiore a tale ammontare.
[...]
        Relativamente all'articolo   3 si precisa che lo stesso e'
applicabile
se:
- un contratto esprime il prezzo unitario di un bene in lire;
- si tratta di importi non superiori alle migliaia di lire;
- occorre   convertire tali importi in euro (perche', ad esempio, il
fornitore
  vuole fatturare in questa valuta);
- manca un diverso accordo delle parti;
- non si tratta di autonomi importi da contabilizzare o da pagare.
        In presenza  delle condizioni sopra evidenziate l'articolo in
rassegna
impone di utilizzare l'importo convertito in euro con almeno:
- cinque  cifre decimali per gli importi originariamente espressi in unita'
di
  lire (da 1 a 9 lire);
- quattro cifre decimali per gli importi originariamente espressi in decine
di
  lire (da 10 a 99 lire);
- tre  cifre decimali per gli importi originariamente espressi in centinaia
di
  lire (da 100 a 999 lire);
- due   cifre decimali per gli importi originariamente espressi in migliaia
di
  lire (da 1.000 a 9.999 lire).
        Si tratta,   come   si puo' notare, di fattispecie che
presumibilmente
ricorreranno in un numero circoscritto di casi.
[...]
Non credere che io abbia le idee chiare...
bye bye

 [...]
Non credo, anzi sarà il contrario: sono tutti i casi in cui cc'è un accordo
preesistente fra le parti (es. ordine, contratto, impegnativa) e il cliente
(giustamente) non vuole sottostare ad aumenti indiscriminati del fornitore
in fase di conversione.
Ciao,
Carlo.

 unsoftware per una banca o per un ente pubblico!
Sì, ma come dicevo all'inizio, è una semplificazione della regola delle 6
cifre significative, non un errore.
Comunque direi che ne abbiamo discusso fin troppo.
Come si dice,... HTH
Ciao,
Carlo.



Penso proprio di si :-)))))
Ciao e buon lavoro!