[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