岩崎です。


  > たぶん、長過ぎたら削るというのが一番手っ取り早いんじゃないでしょ
  > うか。
  > 
  >   s = sprintf("%15.8e", x)
  >   s.sub!(/e\+0{0,#{s.size-15}}/, 'e+') if s.size > 15
  > 
  > これでさらにはみ出す、つまり1e100以上の場合は精度を下げる以外に
  > はないと思います。

  データ自体が1e100を超える事はないのでそれは無視できます。
  力技で直すのはできれば避けたいと思っています。
  (通常のコードで書いて問題ないか あるいは 何らかの宣言のみ程度で
    処理したい)

  > 
  > > あくまで
  > > %15.7eの時 '-1.23456789e+01'
  > > 
  > > と出て欲しいのですが、方法はないのでしょうか?
  > 
  > 精度を7桁と指定している以上、小数点以下が8桁以上になることはあ
  > りません。
  > 
  例が間違っていました。すみません。いずれにせよeXXXと3桁になるのを
  2桁にしたいという意味です。

  > しかし、指数部を常に3桁以上にするというのは珍しい処理系ですね。
  > SUSv2なんかでも最小2桁しか要求してないのに。
  > 
  こちらはNT4+SP5で、rubyは http://www.dm4lab.to/~usa/ruby/#download
に
  あるバイナリーを取ってきただけです。この環境では常に3桁と理解していま
すが
  違うのですか(なのでそんなに珍しいわけではないかな...)。