[wxruby-users] float to_s behavior

Alex Fenton alex at pressure.to
Sun Aug 24 09:09:51 EDT 2008


Hi

Svend Haugaard Sørensen wrote:
> Does wxruby change the behavior of to_s for float ?
>
> If I run this little program  
>
> a = [1.23,4.56,7.89]
> puts a.join(' ')
>
> I get the following output
> 1.23 4.56 7.89
>
> As your would expect, but if I add it to a program that uses wxruby the
> output is 
> 1,23 4,56 7,89
>
> According to danish grammar(I am from Denmark) this is the correct way
> to write numbers but this charge mess with all data files I write.
>   

Interesting. wxRuby itself doesn't do anything to alter the behaviour of 
Float#to_s. The wxRuby library doesn't change or extend any of Ruby's 
standard classes; we consider that bad behaviour for a library.

What's happening is that wxWidgets somewhere is calling the C setlocale 
function - I can't quite pin it down in the Wx source at the moment. 
This affects the way that the C sprintf (and also strftime) functions 
work. Ruby calls these under the hood to implement methods like 
Float#to_s and DateTime#strftime.

I see something similar to you. In my locale (en_GB) our standard way of 
writing dates is DD/MM/YY (today is 24/08/2008), whereas in the US, 
people write months MM/DD/YY (today would be 08/24/2008). When I change 
wxRuby's locale to be en_GB, it also affects the way that Ruby methods 
like Time.now.strftime('%x') work.
> How can I change it back to the original form ? 
>
>   
The easiest way is probably to explicitly switch to en_US locale in the 
startup of your wxRuby application:

Wx::Locale.set_locale('en_US')

See the documentation
http://wxruby.rubyforge.org/doc/locale.html

Examples of using Wx::Locale can be found in one of the tests:
http://wxruby.rubyforge.org/svn/trunk/wxruby2/tests/test_intl.rb

cheers
alex



More information about the wxruby-users mailing list