Newsgroup: it.comp.lang.delphi
Titolo: Arrotondare a intero superiore

Ciao,
devo fare una funzione che mi approssimi un intero alla decina
superiore. Faccio degli esempi per spiegarmi meglio
10 ..> 10
11 --> 20
00 --> 10
57 --> 60
Avete qualche idea ?

> Avete qualche idea ?
Ti serve sul serio qualche idea per fare questa cosa?
A.


ma è facilissimo !
if  i=1 then Result:=10;
if  i=2 then Result:=10;
if  i=3 then Result:=10;
if  i=4 then Result:=10;
if  i=5 then Result:=10;
if  i=6 then Result:=10;
if  i=7 then Result:=10;
if  i=8 then Result:=10;
if  i=9 then Result:=10;
if  i=10 then Result:=10;
if  i=11 then Result:=20;
e cos' via....! 

:

Dipende... i tuoi esempi sono si` abbastanza chiari, ma lasciano dei
dubbi su cosa vorresti ottenere con roba tipo 0 o valori negativi...
In ogni caso, di possibilita` ce ne sono molte, ma la strada maestra in
questi casi passa sempre o quasi per funzioni come:
Round, Trunc, Int e Frac... e ce ne possono essere anche altre come
RoundTo che non conosco...
A parte questo, una semplice possibilita` che forse risponde al tuo
problema e nemmeno fa uso di quelle funzioni potrebbe essere:
function DecinaSuperiore(i: integer): integer;
var
  ris: integer;
begin
  if (i mod 10 = 0) then
  begin
    ris := i;
  end
  else
  begin
    ris := (i div 10 + 1)*10;
  end;
  DecinaSuperiore := ris;
end;
Pero` e` solo un esempio che potrebbe non funzionare come voluto con 0,
e quasi certamente non avra` il comportamento giusto con valori
negativi...
Ciao ciao
Claudio

 e cos' via....!
Urca.. immagino con questo criterio come svilupperesti una funzione che 
arrotonda alla migliaia superiore... :-D
Usare un semplice Int(tuonumero)+10 ?
ciao :)
-- 
morde
D5,D6,D7
QT 4.7.0 - MingW- QT Creator 2.1

Ho fatto proprio una domanda stupida, scusate ...

 Ho fatto proprio una domanda stupida, scusate ...
non esistono domande stupide, il ng esiste proprio per condividere le 
idee e migliorarsi a vicenda. :)
tra l'altro, ho sbagliato anche io la formula, quella corretta dovrebbe 
essere
(int(tuonumero/10)+1)*10
cosě dovresti poter arrotondare tutti i numeri alla decina superiore.
es. tuonumero= 1397.18999
int(1397.18999/10) = 139
(139+1)*10 = 1400. ok


 idee e migliorarsi a vicenda. :)
Stupide no, certo. Pero' ci vuole un po di buon senso.
A.

 Stupide no, certo. Pero' ci vuole un po di buon senso.
Alberto, caro Alberto!
Dopo tanti anni che faccio questo mestiere, che vedo codice scritto da 
altri, e che rivedo il mio dopo anni, mi rendo conto che ci sono cose 
molto più gravi che un ciclo trasformato in if then else.. :-D
ps: è arrivata a milano la nube radioattiva? qui incominciano a vedersi 
persone fosforescenti passeggiare per strada.. :-D


> ps: arrivata a milano la nube radioattiva?
Se la nube arriva qua scappa: mica vuole farsi contaminare dallo smog
che ci sta a Milano.
Se la sera quando torni ti lavi la faccia sembra che viene via
l'intonaco che usa Moira Orfei...
Pero' ci sono degli stupendi manifesti umoristici nelle stazioni del
metro'...
Altro che zelig, toto, Mel Brooks o i fratelli Marx...
Letizia Moratti se li mangia tutti a colazione e li digerisce prima di
pranzo...
"Stiamo lavorando per una Milano migliore bla bla bla..."
....figuriamoci se stavano lavorando per *peggiorare* la situazione.
Meno male che (soprav)vivo fuori Milano....
A.

 (139+1)*10 = 1400. ok
Eppero' cosi' 10 diventa 20, 20 diventa 30, ... !
io direi:
uses Math;
result := ceil(x / 10) * 10;
if result = 0 then result := 10;
oppure:
if (x mod 10 = 0) then result := x
else result := (x div 10 + 1) * 10;
if x = 0 then result := 10;
Saluti
Paolo Arosio

 ....figuriamoci se stavano lavorando per*peggiorare*  la situazione.
AHAHAHAHAHAhaahahahaha.... :D


 Eppero' cosi' 10 diventa 20, 20 diventa 30, ... !
Paolo.setHaiRagione(True);
;-)


 if x = 0 then result := 10;
Questo e` il genere di eccezioni che mi lascia sempre perplesso...
sara` davvero quel che vuole l'OT? Comunque cosi` ha detto, percio` chi
sono io per dubitarne?
Ciao ciao
Claudio