Visualizzazione dei risultati da 1 a 4 su 4

Visualizzazione discussione

  1. #2
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,505
    Hai questo nella sezione "PULISCO LE SINGOLE RIGHE"
    $line = str_replace(",", ".", $line);

    e poi nella "FILTRO DEI NUMERI ..."
    $linenumber = str_replace(".", "", $line);
    $linenumber = str_replace(",", ".", $line);

    In due posti stai sostituendo il carattere , col . (è sempre su $line che intervieni)
    non lo fai usando un if/else hai solo messo dei commenti, quindi vengono eseguiti entrambi, di conseguenza se ad esempio in $line ci fosse 1.400,00:
    viene eseguito il primo
    $line = str_replace(",", ".", $line);

    ora vale 1.400.00

    viene eseguito
    $linenumber = str_replace(".", "", $line);
    il numero diventa
    1,40000
    e lo salvi in $linenumber

    si esegue
    $linenumber = str_replace(",", ".", $line);
    il numero ora è...
    1.400.00
    perché non stai modificando $linenumber, ma $line, quindi la sostituzione avviene sull'originale 1.400,00

    e 1.400.00 è equivalente a 1.4 (lo zero ti verrà per la precisione a 2 decimali nel db probabilmente) dato che la parte ".00" non ha senso, un numero può avere un solo separatore per i decimali e ci si ferma al primo.

    Devi cambiare la logica della pulizia del csv, così non ne esci, almeno non in modo semplice.
    Non devi pulire la riga intera, ma ogni cella secondo le regole del valore in essa contenuto (stringa, numero, data...)
    Ultima modifica di Alhazred; 30-01-2022 a 11:23

Tag per questa discussione

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.