Numero decimale punto o virgola?

  1. 2 months ago
    Edited 2 months ago

    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

  2. Antonio R

    Sep 12 Pre-Release Testers, Xojo Pro Europe (Italy)

    Si ti stai perdendo in un bicchiere d'acqua. :)

    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)

  3. Grazie Antonio, si ero arrivato a questa conclusione.... si mi sono perso un bicchiere d'acqua. :)

    grazie sempre
    Enrico

  4. Antonio R

    Sep 12 Pre-Release Testers, Xojo Pro Europe (Italy)

    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/

  5. Grazie Antonio, ottimo spunto il link!

or Sign Up to reply!