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

[Quizzone di excel] Quesito 28

10 views
Skip to first unread message

plinius

unread,
Jun 28, 2011, 12:45:16 PM6/28/11
to
Sintesi del regolamento:
1) chi risponde per primo con una soluzione che risolve guadagner 5
punti e dovr postare entro due giorni un nuovo quesito
2) ulteriori 3 punti saranno assegnati alla soluzione pi breve
---------------------------------------------------------------------------
----

Per approfondire:
https://sites.google.com/site/e90e50/documento-plinius/quizzone-di-excel
---------------------------------------------------------------------------

Stavolta parleremo del... round's mystery! :-)

Non sono particolarmente pigro, ma odio lavorare inutilmente e, secondo me,
coloro che si sono occupati della traduzione delle funzioni di excel in
italiano meriterebbero la galera a vita.
Ma davvero c'era bisogno di usare parole-chiave cos� lunghe? Non bastavano
poche lettere che richiamassero alla memoria lo scopo della funzione?
Ma lasciamo perdere... si tratta di una mia personalissima opinione che non
pretendo sia condivisa da tutti.
Voglio per� raccontarvi quello che mi � capitato recentemente.
Stavo lavorando su un foglio nel quale usavo molto gli arrotondamenti
(calcoli fiscali) e, per me, scrivere ogni volta ARROTONDA era francamente
un po' fastidioso.
Cos� ho pensato di fare il furbo e ho inserito una UDF molto sbrigativa,
questa:
--------------------
Function ROT(n, d)
ROT = Round(n, d)
End Function
--------------------
Certo, sapevo bene che non era esattamente equivalente ad ARROTONDA, che �
in grado di gestire anche l'arrotondamento a sinistra della virgola (con il
parametro "d" negativo), ma a me non serviva e quindi ROT mi andava pi� che
bene.
Certo, avrei potuto impostarla diversamente:
--------------------
Function ROT(n, d)
ROT = Application.WorksheetFunction.Round(n, d)
End Function
--------------------
ma era troppo lungo da scrivere e poi, sbagliando, ero convinto di ottenere
gli stessi risultati.
Completo i miei calcoli e il risultato, in fondo al foglio di lavoro, � 79.
Bene! Ora che il lavoro � fatto, non mi resta che riportare alla normalit�
il foglio di lavoro liberandolo dalla mia UDF.
Modifica \ sostituisci \ trova "ROT(" \ sostituisci con "ARROTONDA("... e il
gioco � fatto: ora la mia funzione "ROT" posso anche eliminarla!
Ma qui arriva la sorpresa: adesso il risultato in fondo al foglio non � pi�
79 ma 82.
E gi�! Il risultato non era pi� quello di prima. Ma come � possibile?
Ed � cominciata a questo punto la caccia alla differenza: la stessa caccia
che ora chiedo a voi! :-)

5 punti per chi mi dice per primo entrambi i motivi che possono essere
all'origine del cambiamento del risultato finale.

3 punti per chi mi fornisce 2 UDF che restituiscano risultati esattamente
identici a quelli di ARROTONDA (senza, ovviamente, usare la funzione del
foglio). La prima usando "ROUND" ed apportandovi le opportune rettifiche nei
casi in cui il risultato diverga da quello di "ARROTONDA". La seconda usando
altre funzioni VBA, diverse da ROUND. Le due funzioni saranno ritenute
corrette solo in quanto io non riesca a trovare alcun numero che, trattato
con tali UDF, dia risultati diversi da quelli corretti (che poi sono anche
quelli di ARROTONDA).

Buon divertimento!
E. :-)


r

unread,
Jun 29, 2011, 11:48:08 AM6/29/11
to

r

unread,
Jun 29, 2011, 12:00:49 PM6/29/11
to
in particolare l'arrotondamento dipende dal fatto che il numero della parte intera ? pari o dispari ...
ci? si verifica se il secondo argomento ? 0 oppure omesso e se il numero ? composto da parte intera e decimale.

saluti
r

p.s.
posto da http://www.eggheadcafe.com


r

unread,
Jun 29, 2011, 12:11:22 PM6/29/11
to
se non ricordo male Balena nel suo Visual Basic 6 ne parlava diffusamente ... questa sera a casa guardo.

per le udf ... la prima ? facile ... la seconda uffa che stufita :-) io odio arrotonda!


plinius

unread,
Jun 29, 2011, 12:12:33 PM6/29/11
to

"r" <robb...@gmail.com> ha scritto nel messaggio
news:201162911...@terrranews.com...
> http://support.microsoft.com/kb/225330/it
>
> :-)
> saluti
> r
>
>
>

Ok, perfetto: quello � uno dei due motivi. :-)

Round � soggetta a un comportamento bizzarro non documentato: quando la
parte frazionaria � esattamente 0,5, Round l�arrotonda alla cifra superiore
se il numero intero � dispari e alla cifra inferiore se il numero intero �
pari.
Print Round(1.5), Round(2.5) ' Entrambe visualizzano "2".

[Visual Basic 6 - Manuale italiano di Francesco Balena]

Ora l'altro!

Ciao,
E.


r

unread,
Jun 29, 2011, 12:33:31 PM6/29/11
to
scusa in che senso uno dei 2 motivi?
erano le 2 condizioni no?
oppure c'? un'altro caso in cui si ha risultato diverso?

ciao
r

p.s.
la prima udf
Function ROT(n, d)
ROT = VBA.Round(n, d)
If d = 0 And Int(n) <> 0 And Fix(n) Mod 2 = 0 Then
ROT = ROT + 1 * VBA.Sgn(n)
End If
End Function

r

unread,
Jun 29, 2011, 12:45:17 PM6/29/11
to
l'altro ? su 0.5 in cui arrotonda restituisce 1 mentre round 0 stesso risultato su -0.5 dove si ha -1 e 0

giusto?
:-)
r

r

unread,
Jun 29, 2011, 12:46:24 PM6/29/11
to
google group si sta rianimando ... almeno ora leggo il 3d di scossa
r


plinius

unread,
Jun 29, 2011, 1:08:06 PM6/29/11
to

"r" <robb...@gmail.com> ha scritto nel messaggio
news:201162912...@terrranews.com...

Allora, intanto va detto che il diverso comportamento non riguarda solo il
caso dell'arrotondamento all'intero di un numero pari con 0,5 come parte
decimale, ma tutti i casi in cui, dopo lo spostamento della virgola alla
posizione voluta, resti uno 0,5 decimale e la parte intera pari.
Quindi, per esempio,
=ARROTONDA(1874,1985;3) restituisce 1874,199
mentre, nella finestra immediata,
ROUND(1874.1985, 3) restituisce 1874,198

Ma, detto questo, il problema non � ancora risolto, cosa che potrai
verificare creando una function che sistemi l'errore di ROUND e testando poi
la differenza eventuale tra function e ARROTONDA su un buon numero di casi.
Puoi testare 100 righe, per esempio, creando numeri casuali che abbiano 4
cifre decimali di cui l'ultima sia 5 e chiedendone l'arrotondamento alla 3^
decimale.

=SEGNO(CASUALE()-0,5)*INT(CASUALE()*10^$D$2*10000)/10^$D$2+0,0005
(e in D2 metti un 3)

Su 100 avrai ancora circa 5/10 risultati sbagliati.
Anche di questo fenomeno bisogna capire il motivo.

Ciao,
E.


roberto mensa

unread,
Jun 29, 2011, 6:32:26 PM6/29/11
to

Ciao,
leggo su Usenet una risposta di plinius ma non la leggo qui in eggheadcafe ... va beh ... comunque sembra che round canni di brutto :-) ... parrebbe che arrotondi sempre a un numero pari ... per? ci sono delle eccezioni ... ora nno ho tempo mi dispiace ... magari domani.
ciao
r

plinius

unread,
Jul 5, 2011, 6:09:01 AM7/5/11
to
Ok, mi rispondo da solo :-)
Qui c'� il file con tutte le spiegazioni del caso:
http://www.4shared.com/document/W9aqfOv3/Quiz_round.html


In sostanza (e se ne ignora il motivo) la funzione VBA "ROUND" arrotonda
all'intero inferiore (invece che superiore) quando l'intero, dopo lo
spostamento della virgola, sia un numero pari e la parte decimale sia
esattamente uguale a 0,5

Per esempio ROUND(123.545, 2) sbaglia perch� 12354 � pari ed � seguito da
0.5
Invece ROUND(123.15, 1) � corretto perch� 1231 � dispari
Ecc.

Correggendo tale errore per�, non si eliminano tutte le differenze con la
funzione Excel ARROTONDA per via della difficolt� di confrontare la parte
decimale con 0,5 a causa dell'imprecisione delle rappresentazioni numeriche
usate da VBA.
Fa eccezione il tipo "Decimal" che, invece, offre la necessaria accuratezza
e, quindi, con la conversione al tipo decimal del numero in ingresso, la
funzione ROUND pu� essere corretta efficacemente.

Resta comunque molto pi� semplice riprodurre i risultati di ARROTONSA
prescindendo da ROUND con questa:

Function ro3(n, d)
ro3 = Fix(CDec(n) * 10 ^ d + Sgn(n) / 2) / 10 ^ d
End Function

Niente punti, dunque, per questo giro! :-)

Ciao,
E.


r

unread,
Jul 5, 2011, 6:50:00 AM7/5/11
to
On 5 Lug, 12:09, "plinius" <punto.linea...@LEVARElibero.it> wrote:
> Ok, mi rispondo da solo :-)
> Qui c'è il file con tutte le spiegazioni del caso:http://www.4shared.com/document/W9aqfOv3/Quiz_round.html

>
> In sostanza (e se ne ignora il motivo) la funzione VBA "ROUND" arrotonda
> all'intero inferiore (invece che superiore) quando l'intero, dopo lo
> spostamento della virgola, sia un numero pari e la parte decimale sia
> esattamente uguale a 0,5
>
> Per esempio ROUND(123.545, 2) sbaglia perché 12354 è pari ed è seguito da
> 0.5
> Invece ROUND(123.15, 1) è corretto perché 1231 è dispari
> Ecc.
>
> Correggendo tale errore però, non si eliminano tutte le differenze con la
> funzione Excel ARROTONDA per via della difficoltà di confrontare la parte

> decimale con 0,5 a causa dell'imprecisione delle rappresentazioni numeriche
> usate da VBA.
> Fa eccezione il tipo "Decimal" che, invece, offre la necessaria accuratezza
> e, quindi, con la conversione al tipo decimal del numero in ingresso, la
> funzione ROUND può essere corretta efficacemente.
>
> Resta comunque molto più semplice riprodurre i risultati di ARROTONSA

> prescindendo da ROUND con questa:
>
> Function ro3(n, d)
>    ro3 = Fix(CDec(n) * 10 ^ d + Sgn(n) / 2) / 10 ^ d
> End Function
>
> Niente punti, dunque, per questo giro! :-)
>
> Ciao,
> E.

nno sono molto daccordo ...
come diceva balena e come riportato nell'articolo che ho linkato:
http://support.microsoft.com/kb/225330/it

il problema di arrotondamento con secondo argomento =0 o omesso è
riservato ai numeri che hanno una parte decimale esattamente uguale a
0,5

in questo caso per arrotondare con più equilibrio essendo 5 i numeri
che precedono il 5 e 4 quelli che lo seguono (1,2,3,4,5 e 6,7,8,9)
l'arrotondamento viene fatto a seconda che l'intero sia pari o
dispari.

i problemi che invece ho riscontrato e di cui ho già scritto in questo
3d riguardano un comportamento per cui l'arrotondamento avviene sempre
verso un numero pari quando il secondo argomento è >1 ... alcune
eccezioni secondo me sono riconducibili al noto problema dei double.

mi spiace di non aver avuto affatto tempo per poter scrivere una
udf ... ma per il resto i 2 comportamenti che ho riscontrato sono
quelli descritti e già detti nel corso della discussione.

Ciao
r

plinius

unread,
Jul 5, 2011, 7:23:01 AM7/5/11
to

"r" <robb...@gmail.com> ha scritto nel messaggio
news:878e43da-6643-459c...@x10g2000vbl.googlegroups.com...

On 5 Lug, 12:09, "plinius" <punto.linea...@LEVARElibero.it> wrote:
> Ok, mi rispondo da solo :-)
> Qui c'� il file con tutte le spiegazioni del
> caso:http://www.4shared.com/document/W9aqfOv3/Quiz_round.html
>
> In sostanza (e se ne ignora il motivo) la funzione VBA "ROUND" arrotonda
> all'intero inferiore (invece che superiore) quando l'intero, dopo lo
> spostamento della virgola, sia un numero pari e la parte decimale sia
> esattamente uguale a 0,5
>
> Per esempio ROUND(123.545, 2) sbaglia perch� 12354 � pari ed � seguito da
> 0.5
> Invece ROUND(123.15, 1) � corretto perch� 1231 � dispari
> Ecc.
>
> Correggendo tale errore per�, non si eliminano tutte le differenze con la
> funzione Excel ARROTONDA per via della difficolt� di confrontare la parte

> decimale con 0,5 a causa dell'imprecisione delle rappresentazioni
> numeriche
> usate da VBA.
> Fa eccezione il tipo "Decimal" che, invece, offre la necessaria
> accuratezza
> e, quindi, con la conversione al tipo decimal del numero in ingresso, la
> funzione ROUND pu� essere corretta efficacemente.
>
> Resta comunque molto pi� semplice riprodurre i risultati di ARROTONSA

> prescindendo da ROUND con questa:
>
> Function ro3(n, d)
> ro3 = Fix(CDec(n) * 10 ^ d + Sgn(n) / 2) / 10 ^ d
> End Function
>
> Niente punti, dunque, per questo giro! :-)
>
> Ciao,
> E.

nno sono molto daccordo ...
come diceva balena e come riportato nell'articolo che ho linkato:
http://support.microsoft.com/kb/225330/it

il problema di arrotondamento con secondo argomento =0 o omesso �


riservato ai numeri che hanno una parte decimale esattamente uguale a
0,5

in questo caso per arrotondare con pi� equilibrio essendo 5 i numeri


che precedono il 5 e 4 quelli che lo seguono (1,2,3,4,5 e 6,7,8,9)
l'arrotondamento viene fatto a seconda che l'intero sia pari o
dispari.

i problemi che invece ho riscontrato e di cui ho gi� scritto in questo


3d riguardano un comportamento per cui l'arrotondamento avviene sempre

verso un numero pari quando il secondo argomento � >1 ... alcune


eccezioni secondo me sono riconducibili al noto problema dei double.

mi spiace di non aver avuto affatto tempo per poter scrivere una
udf ... ma per il resto i 2 comportamenti che ho riscontrato sono

quelli descritti e gi� detti nel corso della discussione.

Ciao
r

******************

No, no, non ci siamo.
Se ci limitassimo ad una sola cifra dopo la virgola sarebbero da
arrotondare:
verso il basso: 0, 1, 2, 3, 4
e verso l'alto: 5, 6, 7, 8, 9

In realt� i decimali sono teoricamente infiniti e vanno
da 0 a 499999999999999999999999... (verso il basso)
da 5 a 999999999999999999999999... (verso l'alto)

In entrambi i casi sono equamente ripartiti.
Su questo non dovrebbero esserci dubbi, matematicamente!

Il comportameto della funzione ROUNd � sicuramente anomalo e se abbia o meno
una motivazione non � dato conoscerla, almeno non "ufficialmente".

Le "altre" anomalie cui tu fai riferimento spariscono tutte istantaneamente
se fai uso del formato numerico Decimal, qualunque sia il secondo parametro.
Almeno questo � quanto mi risulta dalle prove che ho fatto e che dovrebbe
essere riscontrabile anche dal file che ho allegato.

Ciao,
E.


r

unread,
Jul 5, 2011, 8:19:56 AM7/5/11
to
On 5 Lug, 13:23, "plinius" <punto.linea...@LEVARElibero.it> wrote:
> "r" <robb....@gmail.com> ha scritto nel messaggionews:878e43da-6643-459c...@x10g2000vbl.googlegroups.com...

> On 5 Lug, 12:09, "plinius" <punto.linea...@LEVARElibero.it> wrote:
>
>
>
> > Ok, mi rispondo da solo :-)
> > Qui c'è il file con tutte le spiegazioni del

> > caso:http://www.4shared.com/document/W9aqfOv3/Quiz_round.html
>
> > In sostanza (e se ne ignora il motivo) la funzione VBA "ROUND" arrotonda
> > all'intero inferiore (invece che superiore) quando l'intero, dopo lo
> > spostamento della virgola, sia un numero pari e la parte decimale sia
> > esattamente uguale a 0,5
>
> > Per esempio ROUND(123.545, 2) sbaglia perché 12354 è pari ed è seguito da
> > 0.5
> > Invece ROUND(123.15, 1) è corretto perché 1231 è dispari
> > Ecc.
>
> > Correggendo tale errore però, non si eliminano tutte le differenze con la
> > funzione Excel ARROTONDA per via della difficoltà di confrontare la parte

> > decimale con 0,5 a causa dell'imprecisione delle rappresentazioni
> > numeriche
> > usate da VBA.
> > Fa eccezione il tipo "Decimal" che, invece, offre la necessaria
> > accuratezza
> > e, quindi, con la conversione al tipo decimal del numero in ingresso, la
> > funzione ROUND può essere corretta efficacemente.
>
> > Resta comunque molto più semplice riprodurre i risultati di ARROTONSA

> > prescindendo da ROUND con questa:
>
> > Function ro3(n, d)
> > ro3 = Fix(CDec(n) * 10 ^ d + Sgn(n) / 2) / 10 ^ d
> > End Function
>
> > Niente punti, dunque, per questo giro! :-)
>
> > Ciao,
> > E.
>
> nno sono molto daccordo ...
> come diceva balena e come riportato nell'articolo che ho linkato:http://support.microsoft.com/kb/225330/it
>
> il problema di arrotondamento con secondo argomento =0 o omesso è

> riservato ai numeri che hanno una parte decimale esattamente uguale a
> 0,5
>
> in questo caso per arrotondare con più equilibrio essendo 5 i numeri

> che precedono il 5 e 4 quelli che lo seguono (1,2,3,4,5 e 6,7,8,9)
> l'arrotondamento viene fatto a seconda che l'intero sia pari o
> dispari.
>
> i problemi che invece ho riscontrato e di cui ho già scritto in questo

> 3d riguardano un comportamento per cui l'arrotondamento avviene sempre
> verso un numero pari quando il secondo argomento è >1 ... alcune

> eccezioni secondo me sono riconducibili al noto problema dei double.
>
> mi spiace di non aver avuto affatto tempo per poter scrivere una
> udf ... ma per il resto i 2 comportamenti che ho riscontrato sono
> quelli descritti e già detti nel corso della discussione.

>
> Ciao
> r
>
> ******************
>
> No, no, non ci siamo.
> Se ci limitassimo ad una sola cifra dopo la virgola sarebbero da
> arrotondare:
> verso il basso: 0, 1, 2, 3, 4
> e verso l'alto: 5, 6, 7, 8, 9
>
> In realtà i decimali sono teoricamente infiniti e vanno

> da 0 a 499999999999999999999999... (verso il basso)
> da 5 a 999999999999999999999999... (verso l'alto)
>
> In entrambi i casi sono equamente ripartiti.
> Su questo non dovrebbero esserci dubbi, matematicamente!
>
> Il comportameto della funzione ROUNd è sicuramente anomalo e se abbia o meno
> una motivazione non è dato conoscerla, almeno non "ufficialmente".

>
> Le "altre" anomalie cui tu fai riferimento spariscono tutte istantaneamente
> se fai uso del formato numerico Decimal, qualunque sia il secondo parametro.
> Almeno questo è quanto mi risulta dalle prove che ho fatto e che dovrebbe

> essere riscontrabile anche dal file che ho allegato.
>
> Ciao,
> E.

lo 0 devi escluderlo perchè equivale all'intero
limitati a considerare numeri decimali ad una cifra (perchè il
problema a questo si limita)
hai 1,2,3,4,5 e 6,7,8,9

sulle anomalie con conversione a decimal, decimal non è un tipo di
dato quindi per me equivale ad usare una funzione in più.

comunque sia le anomalie sono due distinte
1) considera solo i numeri a una cifra decimale
2) considera arrotondamenti con secondo argomento >0

se sei daccordo (ma non lo sei mi sembra di capire) i 5 punti me li
becco io :-)

ciao
r

plinius

unread,
Jul 5, 2011, 8:52:34 AM7/5/11
to

"r" <robb...@gmail.com> ha scritto nel messaggio
news:3ca6e74a-6a5a-4a88...@a11g2000yqm.googlegroups.com...

On 5 Lug, 13:23, "plinius" <punto.linea...@LEVARElibero.it> wrote:
lo 0 devi escluderlo perch� equivale all'intero
limitati a considerare numeri decimali ad una cifra (perch� il

problema a questo si limita)
hai 1,2,3,4,5 e 6,7,8,9

sulle anomalie con conversione a decimal, decimal non � un tipo di
dato quindi per me equivale ad usare una funzione in pi�.

comunque sia le anomalie sono due distinte
1) considera solo i numeri a una cifra decimale
2) considera arrotondamenti con secondo argomento >0

se sei daccordo (ma non lo sei mi sembra di capire) i 5 punti me li
becco io :-)

ciao
r

**********************

Lo 0 costituisce per l'intervallo 0-0.5 il limite inferiore, cos� come 0.5
lo � per l'intervallo 0.5-1 (in entrambi i casi estremi esclusi).
Che l'arrotondamento giusto di una parte frazionaria pari a 0.5 debba essere
fatto verso il basso lo dicono anche tutte le altre funzioni di excel stesso
(solo round deroga!) come anche le analoghe funzioni di quelsivoglia
linguaggio di programmazione.

Il fatto che ROUND non gestisca il secondo argomento <1 non pu� essere
considerata una anomalia, visto che � una caratteristica nota della
funzione.

La funzione ROUND "NON" considera affatto solo i numeri ad una cifra
decimale, ma a quante cifre si vuole. La peculiare modalit� di
arrotondamento la manifesta infatti tanto per
ROUND(12.5, 0)
quanto per
ROUND(12.45,1)
ROUND(12.465,2)
ROUND(12.4685,3)
ecc.

Decimal "�" un tipo di dato e, ancorch� non dichiarabile, � attribuibile ad
una variabile variant che, in tal modo, acquisisce caratteristiche che
consentono una estrema precisione (asssenza di qualsivoglia approssimazione)
che la differenziano da ogni altro tipo numerico.

L'unica cosa su cui concordo � la tua affermazione del fatto che non sono
d'accordo :-))

Niente punti eh eh!!

Ciao,
E.


plinius

unread,
Jul 5, 2011, 8:54:50 AM7/5/11
to

"plinius" <punto.l...@LEVARElibero.it> ha scritto nel messaggio
news:iuv1el$ip$1...@dont-email.me...
[cut]
Il fatto che ROUND non gestisca il secondo argomento < 0 non pu� essere

considerata una anomalia, visto che � una caratteristica nota della
funzione
[cut]

... era < 0 ovviamente!


r

unread,
Jul 5, 2011, 9:26:04 AM7/5/11
to
On 5 Lug, 14:54, "plinius" <punto.linea...@LEVARElibero.it> wrote:
> "plinius" <punto.linea...@LEVARElibero.it> ha scritto nel messaggionews:iuv1el$ip$1...@dont-email.me...
> [cut]
> Il fatto che ROUND non gestisca il secondo argomento < 0 non può essere
> considerata una anomalia, visto che è una caratteristica nota della

> funzione
> [cut]
>
> ... era < 0 ovviamente!

ho quasi l'impressione che non hai letto quello che ho scritto :-)

fammi vedere un caso in cui l'arrotondamento è diverso a secondo che
si consideri un numero pari oppure dispari.

l'anomalia in questione si riferisce al solo caso di secondo argomento
=0 e parte decimale =0,5

concordi?
r

r

unread,
Jul 5, 2011, 10:02:28 AM7/5/11
to
On 5 Lug, 14:52, "plinius" <punto.linea...@LEVARElibero.it> wrote:

> Decimal "è" un tipo di dato e, ancorché non dichiarabile, è attribuibile ad


> una variabile variant che, in tal modo, acquisisce caratteristiche che
> consentono una estrema precisione (asssenza di qualsivoglia approssimazione)
> che la differenziano da ogni altro tipo numerico.

visto quello che rispondi immagino tu abbia capito a cosa mi
riferisco.
Decimal non è un tipo di dato in VBA in quanto non è dichiarabile una
variabile come tale.

E' un sottotipo.

In excel i numeri sono double.

Quindi una qualsiasi conversione a decimal è un'operazione che devi
fare in più.

risaluti
r

plinius

unread,
Jul 5, 2011, 10:03:07 AM7/5/11
to

"r" <robb...@gmail.com> ha scritto nel messaggio
news:ad9ecce4-0eb2-4de8...@gv8g2000vbb.googlegroups.com...

On 5 Lug, 14:54, "plinius" <punto.linea...@LEVARElibero.it> wrote:
> "plinius" <punto.linea...@LEVARElibero.it> ha scritto nel
> messaggionews:iuv1el$ip$1...@dont-email.me...
> [cut]
> Il fatto che ROUND non gestisca il secondo argomento < 0 non pu� essere
> considerata una anomalia, visto che � una caratteristica nota della

> funzione
> [cut]
>
> ... era < 0 ovviamente!

ho quasi l'impressione che non hai letto quello che ho scritto :-)

fammi vedere un caso in cui l'arrotondamento � diverso a secondo che


si consideri un numero pari oppure dispari.

l'anomalia in questione si riferisce al solo caso di secondo argomento
=0 e parte decimale =0,5

concordi?
r

*************************

Assolutamente no, e lo avevo detto anche prima facendo degli esempi!

Avevo scritto:


La funzione ROUND "NON" considera affatto solo i numeri ad una cifra
decimale, ma a quante cifre si vuole. La peculiare modalit� di
arrotondamento la manifesta infatti tanto per
ROUND(12.5, 0)
quanto per
ROUND(12.45,1)
ROUND(12.465,2)
ROUND(12.4685,3)
ecc.

Sarei poi io a non leggere Rob?

12.465 arrotondato da ROUND alla seconda cifra decimale diventa 12.46
piuttosto che 12.47 (perch� 6 � pari) come � giusto fare e come
effettivamente fa ARROTONDA
Invece ROUND(12.475, 2) diventa 12.48, stavolta giustamente (perch� 7 �
dispari).

Nel file vengono creati nella prima colonna dei numeri casuali che, in
conseguenza del numero di cifre decimali impostate in A1, hanno tutti parte
decimale (dopo lo spostamento della virgola) pari a 0.5.
Cio� numeri potenzialmente a rischio errore, salvo la disamina pari/dispari.
Quindi mediamente la met� sbaglierebbe, con ROUND.
Malgrado la rettifica operata nella function ro1, dalla colonna D si evince
che tra il 5 e il 10% dei casi l'errore persiste.
Dalla colonna F si evince anche che, usando la conversione a decimal, tale
errore invece scompare del tutto (function ro2).

Ma dalla un'occhiata al file eh! :-)


plinius

unread,
Jul 5, 2011, 10:06:11 AM7/5/11
to

"r" <robb...@gmail.com> ha scritto nel messaggio
news:f6094fa2-e837-4252...@29g2000yqb.googlegroups.com...

On 5 Lug, 14:52, "plinius" <punto.linea...@LEVARElibero.it> wrote:

> Decimal "�" un tipo di dato e, ancorch� non dichiarabile, � attribuibile

> ad
> una variabile variant che, in tal modo, acquisisce caratteristiche che
> consentono una estrema precisione (asssenza di qualsivoglia
> approssimazione)
> che la differenziano da ogni altro tipo numerico.

visto quello che rispondi immagino tu abbia capito a cosa mi
riferisco.

Decimal non � un tipo di dato in VBA in quanto non � dichiarabile una
variabile come tale.

E' un sottotipo.

In excel i numeri sono double.

Quindi una qualsiasi conversione a decimal � un'operazione che devi
fare in pi�.

risaluti
r

********************

Certo che � un sottotipo di variant, come variant/double, variant/long o
qualunque altro.
Ma non capisco questa avversione all'operazione in pi�: se serve la si fa,
no?
E in questo caso serve!


r

unread,
Jul 5, 2011, 10:20:52 AM7/5/11
to
On 5 Lug, 16:06, "plinius" <punto.linea...@LEVARElibero.it> wrote:
> "r" <robb....@gmail.com> ha scritto nel messaggionews:f6094fa2-e837-4252...@29g2000yqb.googlegroups.com...

> On 5 Lug, 14:52, "plinius" <punto.linea...@LEVARElibero.it> wrote:
>
> > Decimal "è" un tipo di dato e, ancorché non dichiarabile, è attribuibile

> > ad
> > una variabile variant che, in tal modo, acquisisce caratteristiche che
> > consentono una estrema precisione (asssenza di qualsivoglia
> > approssimazione)
> > che la differenziano da ogni altro tipo numerico.
>
> visto quello che rispondi immagino tu abbia capito a cosa mi
> riferisco.
> Decimal non è un tipo di dato in VBA in quanto non è dichiarabile una

> variabile come tale.
>
> E' un sottotipo.
>
> In excel i numeri sono double.
>
> Quindi una qualsiasi conversione a decimal è un'operazione che devi
> fare in più.
>
> risaluti
> r
>
> ********************
>
> Certo che è un sottotipo di variant, come variant/double, variant/long o
> qualunque altro.
> Ma non capisco questa avversione all'operazione in più: se serve la si fa,

> no?
> E in questo caso serve!

no! non è la stessa cosa.
Riporto:
Nota La funzione CDec non restituisce un tipo di dati discreto ma un
tipo Variant il cui valore è stato convertito in un sottotipo Decimal.

per ottenere un decimal devi usare una funzione ad hoc ... come per
ottenere un intero da un decimale.

Non è la stessa cosa che usare un variant per metterci un double.

Excel usa double, solo double.

non è la stessa cosa sei daccordo?

plinius

unread,
Jul 5, 2011, 10:27:34 AM7/5/11
to

"r" <robb...@gmail.com> ha scritto nel messaggio
news:fa030a27-cc61-43c6...@g2g2000vbl.googlegroups.com...

On 5 Lug, 16:06, "plinius" <punto.linea...@LEVARElibero.it> wrote:
> "r" <robb....@gmail.com> ha scritto nel
> messaggionews:f6094fa2-e837-4252...@29g2000yqb.googlegroups.com...
> On 5 Lug, 14:52, "plinius" <punto.linea...@LEVARElibero.it> wrote:
>
> > Decimal "�" un tipo di dato e, ancorch� non dichiarabile, � attribuibile

> > ad
> > una variabile variant che, in tal modo, acquisisce caratteristiche che
> > consentono una estrema precisione (asssenza di qualsivoglia
> > approssimazione)
> > che la differenziano da ogni altro tipo numerico.
>
> visto quello che rispondi immagino tu abbia capito a cosa mi
> riferisco.
> Decimal non � un tipo di dato in VBA in quanto non � dichiarabile una

> variabile come tale.
>
> E' un sottotipo.
>
> In excel i numeri sono double.
>
> Quindi una qualsiasi conversione a decimal � un'operazione che devi
> fare in pi�.
>
> risaluti
> r
>
> ********************
>
> Certo che � un sottotipo di variant, come variant/double, variant/long o
> qualunque altro.
> Ma non capisco questa avversione all'operazione in pi�: se serve la si fa,

> no?
> E in questo caso serve!

no! non � la stessa cosa.


Riporto:
Nota La funzione CDec non restituisce un tipo di dati discreto ma un

tipo Variant il cui valore � stato convertito in un sottotipo Decimal.

per ottenere un decimal devi usare una funzione ad hoc ... come per
ottenere un intero da un decimale.

Non � la stessa cosa che usare un variant per metterci un double.

Excel usa double, solo double.

non � la stessa cosa sei daccordo?


****************************

Giriamo in tondo senza capirci, mi pare.
Se uso il numero cos� com'� in una variabile variant ottengo dei risultati
sbagliati.
Se uso il numero convertito in variant/decimal gli errori scompaiono.
Se ne pu� dedurre che la conversione raggiunge lo scopo voluto?

Le altre considerazioni a che servono?


r

unread,
Jul 5, 2011, 11:33:36 AM7/5/11
to
On 5 Lug, 16:27, "plinius" <punto.linea...@LEVARElibero.it> wrote:
> "r" <robb....@gmail.com> ha scritto nel messaggionews:fa030a27-cc61-43c6...@g2g2000vbl.googlegroups.com...

> On 5 Lug, 16:06, "plinius" <punto.linea...@LEVARElibero.it> wrote:
>
>
>
> > "r" <robb....@gmail.com> ha scritto nel
> > messaggionews:f6094fa2-e837-4252...@29g2000yqb.googlegroups.com...
> > On 5 Lug, 14:52, "plinius" <punto.linea...@LEVARElibero.it> wrote:
>
> > > Decimal "è" un tipo di dato e, ancorché non dichiarabile, è attribuibile

> > > ad
> > > una variabile variant che, in tal modo, acquisisce caratteristiche che
> > > consentono una estrema precisione (asssenza di qualsivoglia
> > > approssimazione)
> > > che la differenziano da ogni altro tipo numerico.
>
> > visto quello che rispondi immagino tu abbia capito a cosa mi
> > riferisco.
> > Decimal non è un tipo di dato in VBA in quanto non è dichiarabile una

> > variabile come tale.
>
> > E' un sottotipo.
>
> > In excel i numeri sono double.
>
> > Quindi una qualsiasi conversione a decimal è un'operazione che devi
> > fare in più.
>
> > risaluti
> > r
>
> > ********************
>
> > Certo che è un sottotipo di variant, come variant/double, variant/long o
> > qualunque altro.
> > Ma non capisco questa avversione all'operazione in più: se serve la si fa,

> > no?
> > E in questo caso serve!
>
> no! non è la stessa cosa.

> Riporto:
> Nota   La funzione CDec non restituisce un tipo di dati discreto ma un
> tipo Variant il cui valore è stato convertito in un sottotipo Decimal.

>
> per ottenere un decimal devi usare una funzione ad hoc ... come per
> ottenere un intero da un decimale.
>
> Non è la stessa cosa che usare un variant per metterci un double.

>
> Excel usa double, solo double.
>
> non è la stessa cosa sei daccordo?

>
> ****************************
>
> Giriamo in tondo senza capirci, mi pare.
> Se uso il numero così com'è in una variabile variant ottengo dei risultati

> sbagliati.
> Se uso il numero convertito in variant/decimal gli errori scompaiono.
> Se ne può dedurre che la conversione raggiunge lo scopo voluto?

>
> Le altre considerazioni a che servono?

che il problema non è di round ma dei double :-)

r

unread,
Jul 5, 2011, 11:40:11 AM7/5/11
to

comunque accipicchia ... ero io che mica capivo :-)
il problema del restituire solo numeri pari è solo uno ... l'altro è
il problema relativo ai double ...
uffa sono incasinato .-)

plinius

unread,
Jul 5, 2011, 11:47:42 AM7/5/11
to

"r" <robb...@gmail.com> ha scritto nel messaggio
news:eb9590cc-d1a6-449e...@k27g2000yqn.googlegroups.com...

On 5 Lug, 16:27, "plinius" <punto.linea...@LEVARElibero.it> wrote:
> "r" <robb....@gmail.com> ha scritto nel
> messaggionews:fa030a27-cc61-43c6...@g2g2000vbl.googlegroups.com...
> On 5 Lug, 16:06, "plinius" <punto.linea...@LEVARElibero.it> wrote:
>
>
>
> > "r" <robb....@gmail.com> ha scritto nel
> > messaggionews:f6094fa2-e837-4252...@29g2000yqb.googlegroups.com...
> > On 5 Lug, 14:52, "plinius" <punto.linea...@LEVARElibero.it> wrote:
>
> > > Decimal "�" un tipo di dato e, ancorch� non dichiarabile, �
> > > attribuibile
> > > ad
> > > una variabile variant che, in tal modo, acquisisce caratteristiche che
> > > consentono una estrema precisione (asssenza di qualsivoglia
> > > approssimazione)
> > > che la differenziano da ogni altro tipo numerico.
>
> > visto quello che rispondi immagino tu abbia capito a cosa mi
> > riferisco.
> > Decimal non � un tipo di dato in VBA in quanto non � dichiarabile una

> > variabile come tale.
>
> > E' un sottotipo.
>
> > In excel i numeri sono double.
>
> > Quindi una qualsiasi conversione a decimal � un'operazione che devi
> > fare in pi�.
>
> > risaluti
> > r
>
> > ********************
>
> > Certo che � un sottotipo di variant, come variant/double, variant/long o
> > qualunque altro.
> > Ma non capisco questa avversione all'operazione in pi�: se serve la si
> > fa,
> > no?
> > E in questo caso serve!
>
> no! non � la stessa cosa.

> Riporto:
> Nota La funzione CDec non restituisce un tipo di dati discreto ma un
> tipo Variant il cui valore � stato convertito in un sottotipo Decimal.

>
> per ottenere un decimal devi usare una funzione ad hoc ... come per
> ottenere un intero da un decimale.
>
> Non � la stessa cosa che usare un variant per metterci un double.

>
> Excel usa double, solo double.
>
> non � la stessa cosa sei daccordo?

>
> ****************************
>
> Giriamo in tondo senza capirci, mi pare.
> Se uso il numero cos� com'� in una variabile variant ottengo dei risultati

> sbagliati.
> Se uso il numero convertito in variant/decimal gli errori scompaiono.
> Se ne pu� dedurre che la conversione raggiunge lo scopo voluto?

>
> Le altre considerazioni a che servono?

che il problema non � di round ma dei double :-)

******************

e per risolvere il problema?


plinius

unread,
Jul 5, 2011, 11:49:51 AM7/5/11
to

"r" <robb...@gmail.com> ha scritto nel messaggio
news:efa083e1-be0e-49c0...@w24g2000yqw.googlegroups.com...

On 5 Lug, 17:33, r <robb....@gmail.com> wrote:

comunque accipicchia ... ero io che mica capivo :-)

il problema del restituire solo numeri pari � solo uno ... l'altro �


il problema relativo ai double ...
uffa sono incasinato .-)

**********************

Ecco, ora ci siamo! :-))


r

unread,
Jul 5, 2011, 12:02:43 PM7/5/11
to
On 5 Lug, 17:47, "plinius" <punto.linea...@LEVARElibero.it> wrote:
> "r" <robb....@gmail.com> ha scritto nel messaggionews:eb9590cc-d1a6-449e...@k27g2000yqn.googlegroups.com...

> On 5 Lug, 16:27, "plinius" <punto.linea...@LEVARElibero.it> wrote:
>
>
>
> > "r" <robb....@gmail.com> ha scritto nel
> > messaggionews:fa030a27-cc61-43c6...@g2g2000vbl.googlegroups.com...
> > On 5 Lug, 16:06, "plinius" <punto.linea...@LEVARElibero.it> wrote:
>
> > > "r" <robb....@gmail.com> ha scritto nel
> > > messaggionews:f6094fa2-e837-4252...@29g2000yqb.googlegroups.com...
> > > On 5 Lug, 14:52, "plinius" <punto.linea...@LEVARElibero.it> wrote:
>
> > > > Decimal "è" un tipo di dato e, ancorché non dichiarabile, è

> > > > attribuibile
> > > > ad
> > > > una variabile variant che, in tal modo, acquisisce caratteristiche che
> > > > consentono una estrema precisione (asssenza di qualsivoglia
> > > > approssimazione)
> > > > che la differenziano da ogni altro tipo numerico.
>
> > > visto quello che rispondi immagino tu abbia capito a cosa mi
> > > riferisco.
> > > Decimal non è un tipo di dato in VBA in quanto non è dichiarabile una

> > > variabile come tale.
>
> > > E' un sottotipo.
>
> > > In excel i numeri sono double.
>
> > > Quindi una qualsiasi conversione a decimal è un'operazione che devi
> > > fare in più.
>
> > > risaluti
> > > r
>
> > > ********************
>
> > > Certo che è un sottotipo di variant, come variant/double, variant/long o
> > > qualunque altro.
> > > Ma non capisco questa avversione all'operazione in più: se serve la si

> > > fa,
> > > no?
> > > E in questo caso serve!
>
> > no! non è la stessa cosa.

> > Riporto:
> > Nota La funzione CDec non restituisce un tipo di dati discreto ma un
> > tipo Variant il cui valore è stato convertito in un sottotipo Decimal.

>
> > per ottenere un decimal devi usare una funzione ad hoc ... come per
> > ottenere un intero da un decimale.
>
> > Non è la stessa cosa che usare un variant per metterci un double.

>
> > Excel usa double, solo double.
>
> > non è la stessa cosa sei daccordo?

>
> > ****************************
>
> > Giriamo in tondo senza capirci, mi pare.
> > Se uso il numero così com'è in una variabile variant ottengo dei risultati

> > sbagliati.
> > Se uso il numero convertito in variant/decimal gli errori scompaiono.
> > Se ne può dedurre che la conversione raggiunge lo scopo voluto?

>
> > Le altre considerazioni a che servono?
>
> che il problema non è di round ma dei double :-)

>
> ******************
>
> e per risolvere il problema?

posso con una regexp :-)

ciao
r

plinius

unread,
Jul 5, 2011, 12:05:56 PM7/5/11
to

"r" <robb...@gmail.com> ha scritto nel messaggio
news:ae0e639b-e9ce-424c...@z12g2000yqj.googlegroups.com...

ciao
r

*****************

puoi, ma � fatica sprecata: basta CDec :-))


r

unread,
Jul 5, 2011, 12:27:18 PM7/5/11
to
On 5 Lug, 18:05, "plinius" <punto.linea...@LEVARElibero.it> wrote:
> "r" <robb....@gmail.com> ha scritto nel messaggionews:ae0e639b-e9ce-424c...@z12g2000yqj.googlegroups.com...

> On 5 Lug, 17:47, "plinius" <punto.linea...@LEVARElibero.it> wrote:
>
> posso con una regexp :-)
>
> ciao
> r
>
> *****************
>
> puoi, ma è fatica sprecata: basta CDec :-))

ok :-)
però il problema è riconducibile a uno solo ... quindi ho vinto i 5
punti ...
no eh :-)

sei il campione di giugno ...
ciao
r

plinius

unread,
Jul 5, 2011, 12:36:00 PM7/5/11
to

"r" <robb...@gmail.com> ha scritto nel messaggio
news:d092b750-dc74-4f0c...@ct4g2000vbb.googlegroups.com...

On 5 Lug, 18:05, "plinius" <punto.linea...@LEVARElibero.it> wrote:
> "r" <robb....@gmail.com> ha scritto nel
> messaggionews:ae0e639b-e9ce-424c...@z12g2000yqj.googlegroups.com...
> On 5 Lug, 17:47, "plinius" <punto.linea...@LEVARElibero.it> wrote:
>
> posso con una regexp :-)
>
> ciao
> r
>
> *****************
>
> puoi, ma � fatica sprecata: basta CDec :-))

ok :-)
per� il problema � riconducibile a uno solo ... quindi ho vinto i 5


punti ...
no eh :-)

sei il campione di giugno ...
ciao
r

*************************

I punti vanno sudati, senn� che gusto c'�?

Prossimo quiz: r
(cos� impari!)

Ciao,
E.


r

unread,
Jul 5, 2011, 5:59:41 PM7/5/11
to
On 5 Lug, 18:36, "plinius" <punto.linea...@LEVARElibero.it> wrote:
> "r" <robb....@gmail.com> ha scritto nel messaggionews:d092b750-dc74-4f0c...@ct4g2000vbb.googlegroups.com...

> On 5 Lug, 18:05, "plinius" <punto.linea...@LEVARElibero.it> wrote:
>
> > "r" <robb....@gmail.com> ha scritto nel
> > messaggionews:ae0e639b-e9ce-424c...@z12g2000yqj.googlegroups.com...
> > On 5 Lug, 17:47, "plinius" <punto.linea...@LEVARElibero.it> wrote:
>
> > posso con una regexp :-)
>
> > ciao
> > r
>
> > *****************
>
> > puoi, ma è fatica sprecata: basta CDec :-))
>
> ok :-)
> però il problema è riconducibile a uno solo ... quindi ho vinto i 5

> punti ...
> no eh :-)
>
> sei il campione di giugno ...
> ciao
> r
>
> *************************
>
> I punti vanno sudati, sennò che gusto c'è?
>
> Prossimo quiz: r
> (così impari!)
>
> Ciao,
> E.

si si ... però sun ciapà ...
dovrò assentarmi per un po' ...
voi continuate pure senza di me
ciao
r

plinius

unread,
Jul 6, 2011, 2:16:30 PM7/6/11
to

"r" <robb...@gmail.com> ha scritto nel messaggio
news:5578adf5-dc78-41ef...@gh5g2000vbb.googlegroups.com...

On 5 Lug, 18:36, "plinius" <punto.linea...@LEVARElibero.it> wrote:

si si ... per� sun ciap� ...
dovr� assentarmi per un po' ...


voi continuate pure senza di me
ciao
r

************************

E chi ha fretta?
Facciamo una pausa estiva e ti aspettiamo! :-)


paoloard

unread,
Jul 6, 2011, 2:34:56 PM7/6/11
to
"plinius" ha scritto nel messaggio news:iv28q1$j73$1...@dont-email.me...


"r" <robb...@gmail.com> ha scritto nel messaggio
news:5578adf5-dc78-41ef...@gh5g2000vbb.googlegroups.com...
On 5 Lug, 18:36, "plinius" <punto.linea...@LEVARElibero.it> wrote:

si si ... per� sun ciap� ...
dovr� assentarmi per un po' ...


voi continuate pure senza di me
ciao
r

************************

E chi ha fretta?
Facciamo una pausa estiva e ti aspettiamo! :-)

------------------------------------------------

S�, d'accordo per la pausa estiva.
Tengo in serbo un bel quesito, almeno credo, per quando ne avr� diritto.

ciao paoloard
http://www.riolab.org

0 new messages