Numero decimale punto o virgola?

Salve a tutti, sto impazzendo su un problema che sembra banale ma…
Ho una variabile (double voreelab) su cui faccio un calcolo con numeri decimali vtotreg(double) - (es."voreelab=cdbl(rs1.Field(“OreElab”).Value)*vtotreg")
Messa a video sul mio pc (windows italiano) corretta es. 0,0377*72=2,7144 utilizzando il comando round di voreelab mi riporta il valore arrotondato quindi 3.
Lo stesso codice eseguito su server linux installato in US mi riporta 27144 perch il separatore decimale US il punto e non la virgola, detto questo.
Ho provato con questo e su server Linux risulta :

Dim langCode As Text = Session.LanguageCode.DefineEncoding(Encodings.UTF8).ToText
Dim locale As New Xojo.Core.Locale(langCode)

MsgBox voreelab.ToText(Xojo.Core.Locale.Current, “#,###.##”) 2,7144
voreelabx=str(voreelab.ToText(Xojo.Core.Locale.Current, “#.###,##”))2,7144
voreelab = Round(cdbl(voreelabx))27144

Io ho risolto in questo modo ma credo non sia tanto elegante…

//SERVER LINUX
voreelabx=str(voreelab.ToText(Xojo.Core.Locale.Current, “#,###.##”))
voreelabx=Replaceall(voreelabx,",",".")
voreelab=round(cdbl(voreelabx))
db.sqLexecute(“update CnaPr.CL_Azi set CL_NoreElab = '”+str(voreelab)+"’ where CL_RagSoc=’"+vragsoc+"’")
//FINE SERVER LINUX

Scusate forse mi sto perdendo in un bicchiere di acqua …

Saluti e grazie
Enrico

Si ti stai perdendo in un bicchiere d’acqua. :slight_smile:

1)I double e single internamente sono sempre con il . (indipendentemente dal S.O)
2)Quando vengono mostrati mostrano il separatore del sistema (in una app web dovresti usare il separatore del cliente)
3)Nel database registra (se usi stringhe per inserire il numero) sempre valori con il punto
4)Quando leggi i dati dall’interfaccia se non sai il separatore utilizza il double.fromText con il locale corretto (nel caso web quello del cliente) e/o (ma solo se magari pensi che possono inserirlo da italiani con il punto o se double.fromText fallisce) converti la virgola in punto e usa val (mioDouble=<variable_stringa>.val)
5) ti consiglio di utilizzare i preparedStatement e inserire direttamente il double nel db.

Della serie con i numeri hai sempre 3 elementi da considerare: la rappresentazione interna (nel senso binario e se ne occupa Xojo o il database), il valore che intendi (il valore della variabile) e come viene rappresentato all’utente (ricordati che nel debugger Xojo utilizza i tuoi separatori)

Grazie Antonio, si ero arrivato a questa conclusione… si mi sono perso un bicchiere d’acqua. :slight_smile:

grazie sempre
Enrico

Immaginavo che ci arrivavi.
In ogni caso qui trovi suggerimenti su come localizzare i formati per un’applicazione web (giusto per rimarcare che il Locale lo devi considerare per il client e non per il server, o se vuoi sul server solo per capire cosa ha scritto il client)

https://www.xojoitaliablog.com/localizzare-app-xojoweb/

Grazie Antonio, ottimo spunto il link!