On 23-8-2010 12:19, Benoît Minisini wrote: >> On 23-8-2010 11:54, Benoît Minisini wrote: >>>> In my project I have several temp values in the form of 31.72 C >>>> >>>> They are stored as string and I convert them with Val(sValue) >>>> >>>> My project is translatable, default language is en_US.UTF-8 >>>> >>>> If I change System.Language, Val doesn't know how to convert the value >>>> correctly (or it does it correctly, but I have to change my code) >>>> >>>> Anyone had this problem and knows how to prevent the system from leaving >>>> out point or comma's or the complete value? >>>> >>>> Example project with output: >>>> >>>> ' Gambas module file >>>> >>>> PUBLIC SUB Main() >>>> >>>> DIM sValue AS String = "31,72" >>>> >>>> PRINT "Original Value -> "& sValue >>>> >>>> PRINT System.Language& " -> "; >>>> PRINT Val(sValue) >>>> >>>> System.Language = "nl_NL.UTF-8" >>>> PRINT System.Language& " -> "; >>>> PRINT Val(sValue) >>>> >>>> System.Language = "de_DE.UTF-8" >>>> PRINT System.Language& " -> "; >>>> PRINT Val(sValue) >>>> >>>> sValue = "31.72" >>>> PRINT "\nOriginal Value -> "& sValue >>>> >>>> PRINT System.Language& " -> "; >>>> PRINT Val(sValue) >>>> >>>> System.Language = "nl_NL.UTF-8" >>>> PRINT System.Language& " -> "; >>>> PRINT Val(sValue) >>>> >>>> System.Language = "de_DE.UTF-8" >>>> PRINT System.Language& " -> "; >>>> PRINT Val(sValue) >>>> >>>> END >>>> >>>> OUTPUT IS: >>>> >>>> Original Value -> 31,72 >>>> en_US.UTF-8 -> 3172 >>>> nl_NL.UTF-8 -> 31,72 >>>> de_DE.UTF-8 -> 31,72 >>>> >>>> Original Value -> 31.72 >>>> de_DE.UTF-8 -> 3172 >>>> nl_NL.UTF-8 -> >>>> de_DE.UTF-8 -> 3172 >>>> >>>> So if I store it with . or , it's false interpreted by at least one of >>>> the languages... >>>> I do not have the same values, I also store energy usage and other >>>> values in the form of 41.322 Watts, so the decimal point is not always >>>> at 2 >>>> >>>> I remember this type of discussion regarding currency, how was it >>>> solved? >>>> >>>> Please any input is welcome. >>>> >>>> Gambas2, gb.qt, Ubuntu 10.04 >>>> >>>> Regards, >>>> Ron_2nd. >>> The meaning of "." and "," in numbers changes with the language (the >>> "localization"), and Val() follows the localization settings, so all that >>> is logical. >>> >>> So use CFloat() instead of Val() to have a behaviour that does not >>> depends on localization, and create your own conversion function with >>> it. >>> >>> Regards, >> I have noticed that when using CFloat(sValue) I have to check/translate >> commas to dots first if found in string, otherwise CFloat says 'wanted >> float got string instead' >> >> Would be handy to know what Val() does behind the scene, do you know >> without having to search through your code? It's hard for me to find. >> >> Thanks >> >> Regards, >> Ron_2nd. >> > What Val() does is explained in its wiki documentation page. What information > do you need that is not in that page? >
I was thinking about the code behind it, but it's not important. One last question, is the behaviour below normal? The first CFloat (en_US) returns a dot while the rest returns a comma in the result, ie the are not consistant either, I must have overlooked something..or .? PUBLIC SUB Main() DIM sValue AS String = "31,72" ' replace , by . sValue = Replace(sValue, ",", ".", gb.String) PRINT "Original Value -> " & sValue PRINT System.Language & " -> "; PRINT CFloat(sValue) System.Language = "nl_NL.UTF-8" PRINT System.Language & " -> "; PRINT CFloat(sValue) System.Language = "de_DE.UTF-8" PRINT System.Language & " -> "; PRINT CFloat(sValue) END OUTPUTS: Original Value -> 31.72 en_US.UTF-8 -> 31.72 nl_NL.UTF-8 -> 31,72 de_DE.UTF-8 -> 31,72 Regards, Ron_2nd. ------------------------------------------------------------------------------ This SF.net email is sponsored by Make an app they can't live without Enter the BlackBerry Developer Challenge http://p.sf.net/sfu/RIM-dev2dev _______________________________________________ Gambas-user mailing list Gambas-user@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/gambas-user