Debianユーザからバグレポートをもらいました. 

  $ LANG=C ruby -rgtk -ve 'p [12e-1, 1.2, .12e+1]'
  ruby 1.6.5 (2001-09-19) [i386-linux]
  [1.2, 1.2, 1.2]
  $ LANG=pl_PL ruby -rgtk -ve 'p [12e-1, 1.2, .12e+1]'
  ruby 1.6.5 (2001-09-19) [i386-linux]
  [1,2, 1,0, 0,0]

parse.yとrb_str_to_fで使っているstrtodがlocaleを見るため
setlocaleされた時点で小数点の扱いがかわってきてしまうようです. 
# pl_PLでは「.」ではなく「,」が小数点だそうで. 

また

  $ LANG=C ruby -rgtk -ve 'p Float("1.2")'
  ruby 1.6.5 (2001-09-19) [i386-linux]
  1.2
  $ LANG=pl_PL ruby -rgtk -ve 'p Float("1.2")'
  ruby 1.6.5 (2001-09-19) [i386-linux]
  -e:1:in `Float': invalid value for Float: "1.2" (ArgumentError)
	  from -e:1
  $ LANG=pl_PL ruby -rgtk -ve 'p Float("1,2")'
  ruby 1.6.5 (2001-09-19) [i386-linux]
  1,2

こんなのを考えるとよくわかんなくなるのですが, 
Ruby的には環境によらず小数点は「.」だと考えてよいでしょうか.


とりあえずparse.yでtokadd('.')してるところを
tokadd(*localeconv()->decimal_point)とすると
最初の現象については起きなくなるのですが, 
はたしてこんなようなことをしてしまってようものかどうなのか. 
rb_strtodかなんかを作るべきなのかなあと思ったりしたところで
手が止まってしまいました(^_^;

-- 
 やまだ あきら <URL:http://arika.org/ruby/>
 (akira / arika.org, akira / ruby-lang.org, 
  akira / debian.org or akira / linux.or.jp)