Non sapevo se segnalare la cosa, in quanto immagino che essendo la versione di PHP 5.3 uscita da molto tempo e ancora non aggiornata sui sistemi Altervista, credo che non sarà grazie a questo post che si potrà immaginare un aggiornamento, ad ogni modo, visto che ho ricevuto una mail di altervista che mi esorta ad esprimere il mio giudizio sul servizio offerto... ne approfitto per dire che ho riscontrato questo problema, che purtroppo rende inutilizzabile l'uso dell'hosting presso di voi.
Esiste un bug di PHP che è stato risolto nella versione 5.3 e che riguarda la funzione sprintf. La trasformazione di valori float in valori stringa può causare degli errori piuttosto gravi, principalmente alcuni valori vengono trasformati in una stringa di valore numerico non esatto e riportante un : (sibolo dei due punti) all'interno del valore numerico!
Questo purtroppo pare succedere solo nel caso in cui la funzione sprintf sia chiamata all'interno di procedure complesse che mettano il server in condizione di "sporcare" la propria memoria e spesso non accade se la funzione viene chiamata semplicemente in un sito "vuoto".
Ad ogni modo se vorrete provare questa funzione (echo sprintf('%.16F',"2078");) sul mio sito ritorna il valore:
2077:.0000000000000000
invece di
2078.0000000000000000
Naturalmente questo tipo di bug rende inutilizzabile il servizio offerto se si ha bisogno di utilizzare la suddetta funzione.
Fatemi sapere se qualcuno di voi ha avuto modo di testare la funzione, naturalmente lo stesso identico sito e la stessa funzione ritorna il valore corretto su un server locale che monta PHP 5.3.
Se i tuoi problemi bloccanti sono questo tipo di bug abbandona PHP.
Ovviamente AV non può aggiornare la verisone di PHP ogni volta che viene corretto un bug ....ci saranno più di 1500 bug ancora aperti e questo non è certo il più grave.
"L'intelligenza è una pianta che va curata continuamente.
Dovreste vedere com'è bello, il mio bonsai."
Rat-man®
[Gradient Text]
[Su che server sei?]
->flickr
Sono d'accordo con te che non si possa aggiornare PHP ad ogni correzione di bug ma la versione 5.3 è stata rilasciata a giugno del 2009, anche chi pensa di offrire servizi informatici aggiornando i propri software ogni 2 anni dovrebbe pensare di abbandonare il mondo dei provider.
Ad ogni modo a me la funzione sprintf serve per creare una stringa di valori da passare ad una funzione java, più precisamente al componente highcharts. Visto che mi sembri molto preparato, quali alternative avrei per raggirare l'ostacolo sprintf?
L'alternativa a sprintf come nell'esempio è
$varStringa = "$varFloat"; //tra virgolette
Oppure (ma non so se funziona correttamente)
$varStringa = (string)$varFloat; //Forzi il casting e la conversione che DOVREBBE essere implicita.
Oppure ancora se ti serve la formattazione provare con "number_format".
"L'intelligenza è una pianta che va curata continuamente.
Dovreste vedere com'è bello, il mio bonsai."
Rat-man®
[Gradient Text]
[Su che server sei?]
->flickr
Bug o non bug in 2078.0000000000000000 ci sono 20 cifre significative quando con un floating point a 64 bit hai una mantissa da 16 cifre decimali, quindi in ogni caso quel numero non sarebbe rappresentabile nella sua interezza.
Grazie binarysun per i suggerimenti, ora proverò sicuramente a vedere se alcuni di questi metodi che mi hai descritto possono risolvere il mio problema.
Cercando in giro ho trovato chi si è imbattuto nel mio stesso problema di PHP
Ad ogni modo nel mio progetto sto utilizzando un framework php che utilizza una modulo per generare stringhe JSON. Questo modulo al suo interno fa una trasformazione di un array di valori da poter passare in forma di testo alla funzione javascript con tra le varie la funzione incriminata. Mi bastavano 4 cifre dopo la virgola.
Ciao binarysun, ci tenevo ad informarti che ho provato a seguire le strade che mi hai indicato e rivedendo un po' le varie procedure sono riuscito a raggirare l'ostacolo usando la trasformazione da float a string tramite: