mercoledì 24 settembre 2014

Arrotondare i numeri

Oggi trattiamo un argomento che si può applicare nei più svariati ambiti, perfino nel calcolare le pagine di stampa di un documento: come arrotondare i numeri.
Livecode mette a disposizione le sola funzioni round() e trunc() per tale operazione, ma bisogna sapere come applicarla.
Facciamo degli esempi per vedere come sfruttarla al massimo. Il primo sarà semplicemente arrotondare qualunque numero all'intero più vicino:

put round(2.4) # il risultato è 2
put round(2.6) # il risultato è 3


adesso proviamo ad arrotondare alla prima cifra decimale:

put round(2.712, 1) # il risultato è 2.7
put round(2.765, 1) # il risultato è 2.8


se vogliamo solo la parte intera di un numero (troncare), basta:

put trunc(2.712) # il risultato è 2


Ora viene la parte difficile, certe volte ci serve di arrotondare al numero intero superiore (ceiling o parte intera superiore), esempio 2.1 che diventi 3. Per fare questo bisogna scrivere la seguente funzione:

function ceiling pNumber
    if pNumber < zero or pNumber is an integer then      
       return trunc(pNumber)
    else      
       return trunc(pNumber) + 1
    end if
end ceiling

a questo punto la funzione è pronta:

put ceiling(2.1) # il risultato è 3

Un'altra possibilità della funzione round() è di poter ottenere numeri interi arrotondando ai decimali, centinaia e così via. Per fare questo bisogna utilizzare i numeri negativi come precisione dell'arrotondamento, esempio:

put round(1234, -1) # il risultato è 1220
put round(1236, -1) # il risultato è 1230
put round(1236, -2) # il risultato è 1200
put round(1236, -3) # il risultato è 1000


Per finire questa panoramica vi mostro statRound() che è una funzione simile a round(), ma solo per fini statistiche; quindi usatela solo sapete bene cosa vi può uscire come risultato. Ecco alcuni esempi:

put statRound(2.5) # il risultato è 2, perchè 2 è pari (arrotonda in difetto)
put statRound(3.5) # il risultato è 4, perchè 3 è dispari (arrotonda in eccesso)
put statRound(22.753, 2) # il risultato è 22.75
put statRound(723.2, -1) # il risultato è 720