Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    Arrotondare un numero ad un valore più prossimo


    Satvolta ho questo problema.
    Dato un numero debbo arrotondarlo al cinque o alla decina più vicini, per difetto o per eccesso.
    Faccio un esempio:
    codice:
    Numero 	Resto 	Azione 	       Risultato
    104495 	0 	no 	        104495
    74908 	3 	eccesso 	74910
    88661 	1 	difetto 	88660
    71841 	1 	difetto 	71840
    41615 	0 	no 	        41615
    78591 	1 	difetto 	78591
    Nella prima colonna c'è il numero da arrotondare
    Nella seconda colonna ho usato la funzione fmod($numero, $divisore) per ottenere il modulo (resto) del numero diviso per 5.
    Faccio un processo al numeretto della seconda colonna confrontandolo con la metà di 5 (2.5) per stabilire se e quale arrotondamento eseguire sul numero:
    Codice PHP:
        if ($resto1 == 0) {
            
    $azione "no";
        } else {
            if (
    $resto1 $discriminante) {
                
    $azione "difetto";
            } else {
                
    $azione "eccesso";
            }
        } 
    Fin qui tutto bene

    Quel che non riesco a trovare è il numero da sottrarre o aggiungere per l'arrotondamento?
    Qualcuno potrebbe darmi una dritta?

    Può anche darsi che ho sbagliato l'approccio al problema. Sta di fatto che sono alcuni giorni che non ne vengo a capo.
    Grazie per l'interessamento.

  2. #2
    chiedo scusa, ma nell'esempio postato sopra c'è una inesattezza che rettifico
    codice:
    Numero 	Resto 	Azione 	       Risultato
    104495 	0 	no 	        104495
    74908 	3 	eccesso 	74910
    88661 	1 	difetto 	88660
    71841 	1 	difetto 	71840
    41615 	0 	no 	        41615
    78591 	1 	difetto 	78590      < questo è corretto

  3. #3
    Potresti e dico potresti, in un variabile temporanea, mettere il numero iniziale, aumentarlo di 1 e rifare la divisione, se il resto è diverso da 0 allora aumenti ancora di uno etc, puoi metterlo in un ciclo.

    (e lo sottrai se invece devi andare per difetto)

  4. #4
    Utente di HTML.it L'avatar di boots
    Registrato dal
    Oct 2012
    Messaggi
    1,626
    Non vorrei dire una stupidaggine, ma non è semplicemente:

    Se eccesso: risultato = numero + (5 - resto)
    Se difetto : risultato = numero - resto

  5. #5
    Originariamente inviato da boots
    Non vorrei dire una stupidaggine, ma non è semplicemente:

    Se eccesso: risultato = numero + (5 - resto)
    Se difetto : risultato = numero - resto
    Dovrebbe funzionare a dovere.

  6. #6
    Perfetto, grazie ad entrambi per il prezioso aiuto.
    Ora ottengo il giusto arrotondamento, a meno che non si presentino eccezioni, usando il suggerimento di boots.
    Codice PHP:
        if ($resto1 == 0) {
            
    $azione "no";
            
    $risultato $numero;
        } else {
            if (
    $resto1 $discriminante) {
                
    $azione "difetto";
                
    $risultato $numero $resto1;
            } else {
                
    $azione "eccesso";
                
    $risultato $numero + ($divisore $resto1);
            }
        } 

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.