Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 18
  1. #1

    Usare number_format senza arrotondamenti

    ciao!

    su parecchie pagine ho usato number_format.
    il problema è che arrotonda, e in alcuni casi devo evitare questo comportamento.
    in pratica mi servono due numeri decimali, ma non arrotondati.
    ed inoltre cambiare anche la punteggiatura.
    è possibile usare number_format senza che però arrotondi i decimali??

  2. #2
    Il manuale questo sconosciuto!

    number_format()

    Basta un'occhiata, anche veloce, al manuale ed agli esempi!
    "Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)

  3. #3
    scusa hai ragione grazie, gli esempi non li ho visti.
    ho provato questa e sembra funzionare:
    Codice PHP:
    <?php
    function fnumber_format($number$decimals=''$sep1=''$sep2='') {

            if ((
    $number pow(10 $decimals 1) % 10 ) == 5)  //if next not significant digit is 5
                
    $number -= pow(10 , -($decimals+1));

            return 
    number_format($number$decimals$sep1$sep2);

    }

  4. #4
    Un trucco per non farli arrotondare è impostare a zero il decimale di una potenza inferiore a quello che ti interessa.
    Es. 1234,56789 e vuoi ottenere 1234,56
    imposti a zero il terzo decimale e poi applichi number_format.


    Altra soluzione, proposta su php.net:
    Codice PHP:
    function fnumber_format($number$decimals=''$sep1=''$sep2='') {

            if ((
    $number pow(10 $decimals 1) % 10 ) == 5)  //if next not significant digit is 5
                
    $number -= pow(10 , -($decimals+1));

            return 
    number_format($number$decimals$sep1$sep2);



  5. #5
    si grazie, ho usato proprio l'esempio di php.net.

    ciao!!!

  6. #6
    torno un attimo sull'argomento.
    mi sono accorto che questo codice produce esattamente lo stesso risultato:
    Codice PHP:
    <?php

    function truncateNumberFormat($number$decimals 2$decimalPoint ','$thousandPoint '.') {
        if ((
    $number pow(10$decimals 1) % 10 ) == 5) {
            
    $number -= pow(10, -($decimals 1));
        }
        return 
    number_format($number$decimals$decimalPoint$thousandPoint);
    }

    $number 10123.06;
    echo 
    number_format($number2',''.') . ' - ' truncateNumberFormat($number2);
    possibile abbiamo cambiato il comportamento di number_format?
    o non ci ho capito nulla??

  7. #7
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,372
    Quesito interessante. Mi sono fatto una funzioncina.

    Codice PHP:
    <?php
            
    function my_number_format ($number $decimals $dec_point "." ,$thousands_sep "," ) {
      
    // Separazione parte intera e parte decimale
            
    sscanf($number,"%d.%d",$int,$deci);
            
    $rev strrev($int);
      
            
    // Parte decimale
            
    $dec trim(substr($deci,0,$decimals));
            
    $dec $dec.str_repeat('0',$decimals-strlen($dec));
            
            
    // Parte intera
            
    $i   strlen($int);
            
    $res "";
            for (
    $j=0;$j<$i;$j=$j+3) {
                    
    $res $res." ".substr($rev,$j3);
            }
      
      
    // Risultato finale
            
    $res strrev($res);
            
    $res str_replace(" ",$thousands_sep,trim($res));
            if (
    $dec!="") {$res $res.$dec_point.$dec;}
      
            return 
    $res;
    // function my_number_format ($number , $decimals = 0 , $dec_point = "." ,$thousands_sep = "," ) 
    $number 1888234.5678;
    $res    =  my_number_format($number,2);
    print 
    "$number => $res <br>";
    $number 1888234;
    $res    =  my_number_format($number,2);
    print 
    "$number => $res <br>";
    $number 1888234.5;
    $res    =  my_number_format($number,2);
    print 
    "$number => $res <br>";
    $number 1888234.5678;
    $res    =  my_number_format($number,2,"."," ");
    print 
    "$number => $res <br>";
    $number 1.5;
    $res    =  my_number_format($number,2);
    print 
    "$number => $res <br>";
    $number 12.5;
    $res    =  my_number_format($number,2);
    print 
    "$number => $res <br>";
    $number 123.5;
    $res    =  my_number_format($number,2);
    print 
    "$number => $res <br>";
    $number 1234.5;
    $res    =  my_number_format($number,2);
    print 
    "$number => $res <br>";
    $number 1234.5;
    $res    =  my_number_format($number,2,","," ");
    print 
    "$number => $res <br>";
    $number 1888234.5678;
    $res    =  my_number_format($number,3);
    print 
    "$number => $res <br>";
    $number 1888234.5678;
    $res    =  my_number_format($number,0,"."," ");
    print 
    "$number => $res <br>";
    Ridatemi i miei 1000 posts persi !!!!
    Non serve a nulla ottimizzare qualcosa che non funziona.
    Cerco il manuale dell'Olivetti LOGOS 80B - www.emmella.fr

  8. #8
    saluti,

    come già consigliato, nel manuale... http://it1.php.net/manual/en/class.numberformatter.php
    ci sono le funzioni per arrotondare.. non è prevista una costante per "non" arrotondare ma puoi aumentare i numero di decimali usati.

    Codice PHP:
    $nf = new \NumberFormatter( \Locale::DEFAULT_LOCALE, \NumberFormatter::DECIMAL );
    $nf->setAttribute( \NumberFormatter::MAX_FRACTION_DIGITS);
    echo 
    $nf->format10123.06756854 );
    echo 
    $nf->format10123.06756856 );
    echo 
    $nf->format10123.0675685655 );
    echo 
    $nf->format10123.0675685645 );
    echo 
    $nf->format10123.06756 ); 
    essendo un formatter se sfori nei decimali ovviamente farà l'arrotondamento in base al ROUNDING_MODE impostato.

    ave
    Questa volta, più che un voto.. è favoreggiamento.

  9. #9
    uhm però tu non usi la funzione number_format classica.

    cmq il discorso originario era che number_format arrotondava e non volevo.
    ed avevo usato una funzione consigliata tra i commenti.

    ora vedo che quella funzione e number_format hanno lo stesso output e mi chiedevo perchè, a prescindere se ce ne fosse bisogno o meno.

    cmq mi guardo anche il link che hai postato.
    grazie!

  10. #10
    Quote Originariamente inviata da Al_katraz984 Visualizza il messaggio
    saluti,

    come già consigliato, nel manuale... http://it1.php.net/manual/en/class.numberformatter.php
    ci sono le funzioni per arrotondare.. non è prevista una costante per "non" arrotondare ma puoi aumentare i numero di decimali usati.

    Codice PHP:
    $nf = new \NumberFormatter( \Locale::DEFAULT_LOCALE, \NumberFormatter::DECIMAL );
    $nf->setAttribute( \NumberFormatter::MAX_FRACTION_DIGITS);
    echo 
    $nf->format10123.06756854 );
    echo 
    $nf->format10123.06756856 );
    echo 
    $nf->format10123.0675685655 );
    echo 
    $nf->format10123.0675685645 );
    echo 
    $nf->format10123.06756 ); 
    essendo un formatter se sfori nei decimali ovviamente farà l'arrotondamento in base al ROUNDING_MODE impostato.

    ave
    cmq ho provato il tuo esempio, paro paro, e nella pagina non esce nulla.
    la versione di php installata è la 5.4.4, quindi dovrebbe essere ok.

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.