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

    Estrazione record excel rimozione zero finale

    Salve estraggo dei codici da excel il cui valore può essere un codice come ad esempio 5.120 , ho provato ad inserire un piccolo codice di debug :

    codice:
                                    //DEBUG
                                    if ($row[3]=='5.120') {
                                        
                                        echo 'Controllo_zero_finale:'.(string)$row[3];
                                        die();
                                    }
    La stringa che viene fuoi è :

    codice:
    Controllo_zero_finale:5.12
    Perchè viene tolto lo zero finale ? come posso evitare ? (perchè nel db mi inserisce 5.12)

    Mi sono accorto che se nell' if metto === non trova il valore quindi quello che riceve è già 5.12 , quindi come risolvo ?
    Ultima modifica di pippuccio76; 19-12-2022 a 11:34

  2. #2
    PHP interpreta 5.120 come 5 virgola 12 perchè per il PHP il punto è il separatore dei decimali, non delle migliaia.

    Rimuovi i punti dalla stringa e sostituisci la vigola con il punto e poi inserisci il valore nel DB

  3. #3
    Quote Originariamente inviata da filippo.toso Visualizza il messaggio
    PHP interpreta 5.120 come 5 virgola 12 perchè per il PHP il punto è il separatore dei decimali, non delle migliaia.

    Rimuovi i punti dalla stringa e sostituisci la vigola con il punto e poi inserisci il valore nel DB

    No ma il problema è a monte sembra che quando legga legga già come 5.12 infatti l'errore è presente già nel debug che è prima dell'inserimento .

    Utilizzo queste classi per la gestione :

    codice:
    use PhpOffice\PhpSpreadsheet\Spreadsheet;use PhpOffice\PhpSpreadsheet\IOFactory;
    use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
    use PhpOffice\PhpSpreadsheet\Style\Border;
    use PhpOffice\PhpSpreadsheet\Style\Color;
    Può essere un problema già della classe ?

  4. #4

  5. #5
    Utente di HTML.it L'avatar di Joe Taras
    Registrato dal
    Nov 2003
    residenza
    Taranto
    Messaggi
    955
    Quote Originariamente inviata da pippuccio76 Visualizza il messaggio
    Salve estraggo dei codici da excel il cui valore può essere un codice come ad esempio 5.120 , ho provato ad inserire un piccolo codice di debug :

    codice:
                                    //DEBUG
                                    if ($row[3]=='5.120') {
                                        
                                        echo 'Controllo_zero_finale:'.(string)$row[3];
                                        die();
                                    }
    La stringa che viene fuoi è :

    codice:
    Controllo_zero_finale:5.12
    Perchè viene tolto lo zero finale ? come posso evitare ? (perchè nel db mi inserisce 5.12)

    Mi sono accorto che se nell' if metto === non trova il valore quindi quello che riceve è già 5.12 , quindi come risolvo ?
    Mi sfugge come faccia ed entrare nell'IF se controlli 5.120 ma poi ti stampa 5.12

    Ma il dato a DB che salvi è string o numerico?

  6. #6
    Utente di HTML.it
    Registrato dal
    Oct 2011
    Messaggi
    192
    If strict il confronto è se il tipo e il valore sono uguali.
    Codice PHP:
    // strict
    if('5.120' === '5.120') {
    echo 
    'vero';
    }
    // Non strict
    if(5.12 == '5.120') {
    echo 
    'vero';

    Solitamente i numeri in virgola mobile sono con perdita di precisione e zero dopo il punto decimale non sono significativi (eccetto qualche eccezione).
    Quindi nel database è di tipo float?
    Per il debug meglio utilizzare la funzione var_dump che indica anche il tipo
    Effettivamente anche utilizzare echo converte da float a stringa usa una precisione arbitraria su vecchie installazioni php, ovviamente zero non è permesso.
    Ultima modifica di darbula; 19-12-2022 a 15:45

  7. #7
    Quote Originariamente inviata da darbula Visualizza il messaggio
    If strict il confronto è se il tipo e il valore sono uguali.
    Codice PHP:
    // strict
    if('5.120' === '5.120') {
    echo 
    'vero';
    }
    // Non strict
    if(5.12 == '5.120') {
    echo 
    'vero';

    Solitamente i numeri in virgola mobile sono con perdita di precisione e zero dopo il punto decimale non sono significativi (eccetto qualche eccezione).
    Quindi nel database è di tipo float?
    Per il debug meglio utilizzare la funzione var_dump che indica anche il tipo
    Effettivamente anche utilizzare echo converte da float a stringa usa una precisione arbitraria su vecchie installazioni php, ovviamente zero non è permesso.
    Nel database è di tipo string perchè è un codice ed alcuni codici iniziano per lettera, mi sono accorto che l'errore è se lo trasformo in csv (che mi serve per i valori corretti dei numeri con la virgola)

    questa è la riga del csv :

    codice:
    2000;ESTR;Mag Transito;5.120;FOOT. 3/4 DIA RUBBER;1.000;PZ;286,25;EUR;;;;0;0;0;0,00
    Ultima modifica di pippuccio76; 19-12-2022 a 16:56

  8. #8
    Utente di HTML.it
    Registrato dal
    Oct 2011
    Messaggi
    192
    Quindi se imposti in lettura tra stringa https://phpoffice.github.io/PhpSprea...d_setEnclosure

  9. #9
    Quote Originariamente inviata da darbula Visualizza il messaggio
    Quindi se imposti in lettura tra stringa https://phpoffice.github.io/PhpSprea...d_setEnclosure

    IO eseguo semplicemente un toArray() , è possibile specificare quale colonna è un float e quale una stringa ?

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.