Mysql Double Field

Buongiorno a tutti,
Mi capita una cosa strana con la lettura dei valori da database. Premetto che ho sempre avuto problemi di qualsiasi natura con i valori decimali sul database da quando uso XOJO perch purtroppo siamo italiani e la notazione decimale diversa.
Utilizzo un database Mysql 5.7 configurato in italiano, Xojo 2018.r1.1.

Praticamente utilizzando MySQLPreparedStatement(BindType ->MYSQL_TYPE_DOUBLE) salvo correttamente un valore sul database (ES: 5000,000028). Vedo infatti come valore salvato 5.000,000028. Quando faccio la SELECT nel RecordSet vedo 5000… ma vabbe non mi sono scoraggiato e sono andato avanti. Tramite il comando DoubleValue sul Recordset ho detto prendo il valore double e poi lo converto in Text in questo modo:

dim d as Double = data.Field("Qta").DoubleValue
dim t as Text = d.ToText(Session.LinguaConversione) 'Ovviamente linguacorrente  IT

La cosa assurda questa:
d risulta uguale a 5000,0000280000003841
Tolta la possibile rappresentazione binaria diversa che per limiti di conversione posso capire,ma non capisco perch utilizza la virgola invece del punto o.O. Dovrebbe essere un valore salvato nel computer quindi indipendente dalla notazione italiana…Bug Grafico del Debug?
Quando poi tenta di convertirlo in testo t=5.000

Tutti i valori elencati sono presi da Debug…Possibile che devo prendere la Stringa invertire punti con virgole ecc e procedere tutte le volte?
Qualche consiglio?

In debug vedi i valori localizzati

Ok allora perch la conversione 5.000?

Se converti senza localizzazione (.toText e basta) va in errore o cosa restituisce?

Non ho neanche provato per un motivo molto semplice:
sviluppo su Windows che prende correttamente la lingua italiana ma l’applicazione compilata gira su un server linux che cmq in Italiano ma non mi prende il locale giusto(non ho ancora capito il perch se hai qualche consiglio ben accetto) quindi rischio di avere codice che in debug mi funziona e in build no.

Ho fatto un test veloce solo per provare e t =5000.000028 che corretto

Dall’uso di session immagino sia un’app web. In quel caso puoi vedere qui come leggere il formato richiesto dal client.

Visto che t corretto, probabilmente un problema legato all’assenza di un formato per la toText localizzata. Prova magari con:
.toText(Session.LinguaConversione, “#,##0.0000”)

Grazie la localizzazione appena riesco leggo tutto.
Con .toText(Session.LinguaConversione, “#,##0.0000”) mi sega cmq via i decimali e ottengo t=5.000,0000 quindi devo convertire gli 0 in #?

No gli 0 indicano che vuoi sempre la cifra e # che la vuoi solo se esiste.
Prova ad aggiungere uno 0, mi sono accorto che il tuo numero 5000.000028 e con #,##0.0000 il risultato 5.000,0000 giusto.

Dovresti avere:
5.000,00003 con #,##0.00000
5.000,000028 con #,##0.000000

Ok cos funziona per se l’utente mi inserisce un double con pi decimali torniamo al punto di prima? Come faccio a prevederlo …

Questo lo devi stabilire tu in base al massimo di approssimazione accettabile (come hai visto i double in Xojo, come in tutti linguaggi hanno un problema di rappresentazione)

Diciamo che se l’utente pu inserire/vedere un numero indefinito di decimali in un campo editabile eviterei la formattazione con , (che da noi sarebbe il punto in visualizzazione) ma useri semplicemente:
#.######### dove il numero # dopo il punto sono quelli che hanno senso per te
Se l’utente li inserisce devi solo trasformare il testo in double, altrimenti se li scrivi tu da codice verranno visualizzati solo quelli definiti (con eventuali problemi di approssimazione come gi detto)

Va bene grazie! Ho dato un occhiata rapida alla localizzazione, ma la tua guida serve per capire il client che si connette che locale ha mentre il mio problema che indipendentemente dalla lingua impostata sul client e il languageCode =Localization.Italian impostato nell’Open della sessione prende come locale quello inglese . Quindi devo sempre passare il locale che voglio io e non quello che rileva lui dal server.

Lo xojo.Core.Locale.Current quello del server. Se questo impostato su it_IT sar italiano altrimenti, in genere, inglese.

Ti avevo postato quelle informazioni perch in genere si ha il problema di rappresentarle nella lingua preferita dell’utente.
Il principio lo stesso.

Se vuoi impostare la localizzazione devi usare:
languageCode=“it” // o “en” o ad esempio “de”
locale=new Xojo.Core.Locale(“it_IT”) // o “en_EN” o “de_DE” dove locale una propriet della sessione di tipo Xojo.Core.Locale

Questa propriet quella che devi utilizzare come parametro nei .toText

Sisi quello che faccio per la cosa assurda che ho fatto dei test con ubuntu Server installato in italiano,controllato la presenza dei locale in italiano,controllato le impostazioni del webserver, ma cmq sul server mi prende come lingua l’inglese! Non fa nulla era solo per avere un parere in pi

Grazie !!!

Antonio un ultima cosa… Hai gi aperto un feedkback o devo farlo io? Perch non penso sia normale che faccia una conversione del genere con il locale e senza invece funziona…
Fammi sapere,

Grazie