Newsgroup: it.comp.lang.visual-basic
Titolo: [Semi-OT] Round e politica Microsoft

Ciao a tutti
il mio fratellino mi ha segnalato quello che pareva un bug di Access:
SELECT ROUND(14.5), ROUND(15.5)
Secondo voi cosa ritorna? Io ero convinto che per definizione, con un 
bel .5 decimale, si arrotondasse all'intero più basso (dando 14 e 15), 
ma ero indeciso: magari si arrotondava a quello più alto (dando 15 e 16).
Invece?
Invece il risultato è: 14 e 16
E non è un bug, è da progetto: ecco cosa si dice sul sito Microsoft 
all'indirizzo 
http://www.microsoft.com/technet/prodtechnol/office/office2000/proddocs/opg/part2/ch07.mspx
(si riferisce al VBA, ma credo che la funzione di Access si appoggi al VBA)
"Although the Round function is useful for returning a number with a 
specified number of decimal places, you can't always predict how it will 
round when the rounding digit is a 5. How VBA rounds a number depends on 
the internal binary representation of that number. If you want to write 
a rounding function that will round decimal values according to 
predictable rules, you should write your own."
Come dire: c'è la funzione ROUND, ma se la usi non aspettarti che 
funzioni. Se vuoi una funzione ROUND che funzioni fattela da te.
Simpatici! Soprattutto con quello che ci fanno pagare i loro applicativi 
Office!
Ciao
    Michele

 funzioni. Se vuoi una funzione ROUND che funzioni fattela da te.
Io non so in VBA, ma in 
VB.NET
 e altri, è un comportamento perfettamente 
documentato e riproducibile. L'approssimazione sarà al più vicino numero 
pari, tutto qui.
Magari poi davvero in VBA va a caso, questo non lo so :-)
-- 
news:it-alt.comp.software.openoffice : Il newsgroup dedicato a
OpenOffice.org, la suite open source di applicazioni per ufficio.
Saluti, VITRIOL

 E non è un bug, è da progetto:
Sì, è una vecchia storia.
La chiamano "approssimazione bancaria" (personalmente avrei preferito la 
classica approssimazione matematica, cioè all'intero superiore).
Questo perchè essendo lo 0.5 esattamente a meta, statisticamente 
approssimando una volta in su e una volta in gù alla lunga avrai un totale 
delle approssimazioni più o meno corretto.
Ciao

 La chiamano "approssimazione bancaria"
E' veramente una cosa stupenda questo NG: non si finisce mai di imparare!
Grazie!!!

 
Però, a questo punto, questa "feature" dovrebbe riguardare tutti i 
prodotti Microsoft, mentre il risultato della funzione ARROTONDA di 
Excel 2000 è "corretto":
infatti ARROTONDA(14,5;0)=15 ed ARROTONDA(15,5;0)=16
Perchè questa discrepanza?
m.


Ma non parliamo di VBA?
Questa nel vba di Excel, i numeri in A1 e A2 del Foglio1:
Public Sub m()
    With Worksheets("Foglio1")
        MsgBox Round(.Range("A1").Value) & _
            vbCrLf & Round(.Range("A2").Value)
    End With
End Sub
Da 14 e 16.
ARROTONDA() è una funzione di Excel.
Infatti:
Public Sub m()
    With Worksheets("Foglio1")
        MsgBox WorksheetFunction.Round(.Range("A1").Value, 0) & _
            vbCrLf & WorksheetFunction.Round(.Range("A2").Value, 0)
    End With
End Sub
Da 15 e 16.
Ma ARROTONDA() (o WorksheetFunction.Round()) non sono
VBA, ma Excel. E si aspettano *obbligatoriamente* due
argomenti.
Dalla guida di Excel:
Sintassi
ARROTONDA(num;num_cifre)
Num    è il numero che si desidera arrotondare.
Num_cifre    specifica il numero di cifre a cui si desidera arrotondare num.
-- 
---------------------------
Mauro Gamberini
http://www.riolab.org/
 

 
Infatti, ma se è una "caratteristica" esplicitamente prevista da M$, 
allora dovrebbe affliggere anche Excel, no?
Non è una domanda tecnica, diciamo più che altro "politica".
m.

 allora dovrebbe affliggere anche Excel, no?
Non è una politica di Microsoft.
Ad es. anche Delphi fa così.
Perchè Excel si comporti in modo diverso non saprei.
Ciao