= sprintfեޥå

Ruby  sprintf եޥåȤϴŪ C  sprintf(3) [manual page]
ΤΤƱǤshort  long ʤɤ C ͭηФ뽤Ҥ
ʤȡ2ʿλؼ(%b)¸ߤ뤳ȡsprintf Τ٤Ƥ
ݡȤƤʤ(': 3ڤ)ʤɤΰ㤤ޤ

rubysprintfեޥåȤ˴ؤ봰ϰʲ̤Ǥ

ʲsprintfեޥåȤν񼰤Ǥ[]ǰϤޤ줿ʬϾά
ǽǤ뤳Ȥ򼨤Ƥޤ

 %[$][ե饰][][.]ؼ

`%' ȤϤˤ `%%' Ȥޤ

ʲ줾Ǥ˴ؤޤ

== ե饰

ե饰ˤ `#', `+', ` '(ڡ), `-', `0' 5बޤ

: #

  2ʡ8ʡ16ʤλؼ(`b', `o', `x', `X') ǤϤ줾ץեå
  Ȥ"0b", "0", "0x", "0X" ղäޤ
        p sprintf("%#b", 10) # => "0b1010"
        p sprintf("%#o", 10) # => "012"
        p sprintf("%#x", 10) # => "0xa"
        p sprintf("%#X", 10) # => "0XA"

  ư (`f', `e', `E', `g', `G') ФƤɬϤ"."Ĥޤ

        p sprintf("%.0f", 10) # => "10"
        p sprintf("%#.0f", 10) # => "10."
        p sprintf("%.0e", 10) # => "1e+01"
        p sprintf("%#.0e", 10) # => "1.e+01"

  ޤ `g', `G' ǤϾ嵭˲ä;ʬ0Ĥޤ

        p sprintf("%.05g", 10) # => "10"
        p sprintf("%#.05g", 10) # => "10.000"

: +

  ʸդˤޤäοǤ`+'ղäޤ
  ͤλؼ
  (`d', `i', `b', `o', `x', `X', `u', `f', `e', `E', `g', `G')
  ФƤ̣ޤ
  ޤä `b', `o', `x', `X', `u' ФƤϡФ `-'
  ղä뤳Ȥ򼨤ޤ

        p sprintf("%d", 1)   # => "1"
        p sprintf("%+d", 1)  # => "+1"

        p sprintf("%x", -1)  # => "..f"  # ".." ̵¤ f ³ȤɽƤ
        p sprintf("%+x", -1) # => "-1"

: ' '(ڡ)

  `+' ƱǤ`+'˶Ѥޤͤλؼ
  (`d', `i', `b', `o', `x', `X', `u', `f', `e', `E', `g', `G')
  ФƤ̣ޤ

        p sprintf("%d", 1)   # => "1"
        p sprintf("%+d", 1)  # => "+1"
        p sprintf("% d", 1)  # => " 1"

        p sprintf("%x", -1)  # => "..f"
        p sprintf("% x", 1)  # => " 1"
        p sprintf("% x", -1) # => "-1"

: -

  Ϥ򺸵ͤˤޤפλ꤬ʤ
  ̣ޤ

: 0

  Ϥͤξ;äʬ˶ `0' ͤޤ

  ͤλؼ(`d', `i', `b', `o', `x', `X', `u', `f', `g', `G')Ф
  Ƥ̣ޤ(`e', `E' ˤϰ̣ʤ)

        p sprintf("%010d", 10)
        # => "0000000010"

  `#' Ȱ˻ꤷνϤϰʲΤ褦ˤʤޤ

        p sprintf("%#010x", 10)  # => "0x0000000a"
        p sprintf("%#010o", 10)  # => "0000000012"
        p sprintf("%#010b", 10)  # => "0b00001010"

  ϡʲƱǤ

        p sprintf("%#10.8x", 10) # => "0x0000000a"
        p sprintf("%#10.9o", 10) # => "0000000012"
        p sprintf("%#10.8b", 10) # => "0b00001010"

  ̾ϡʲΤ褦ˤʤޤ

        p sprintf("%#10x", 10)   # => "       0xa"
        p sprintf("%#10o", 10)   # => "       012"
        p sprintf("%#10b", 10)   # => "    0b1010"

== 

0ʳοǻϤޤˤʤޤʸĹ
ޤҤΡ١פͤˤ餺ʬ
ʸޤ

λϡ֥ե饰פͿ " ", "+",
"-", "0b", "0", "0x", "0X" Ĺθޤ

        p sprintf("%#05x", 10) # => "0x00a"

ϡֺɬפפλˤʤޤ̤ʸ󤬻ꤷĶ
λ̵ˤʤޤ

Ȥ `*' ꤹͤ뤳Ȥˤʤޤ

      p sprintf("%10s", "foo")    # => "       foo"
      p sprintf("%*s", 10, "foo") # => "       foo"

== 

"." θ³٤ɽޤ("." Τߤξ ".0" ƱǤ)٤
λؼ
(`d', `i', `b', `o', `x', `X', `u')
ФƤϡʬḶ́ޤ

      p sprintf("%10.5d", 1)  # => "     00001"
      p sprintf("%#10.5x", 1) # => "   0x00001"
      p sprintf("%+10.5x", 1) # => "    +00001"

ưλؼ
(`f')
ФƤϾη̣ޤ

      p sprintf("%10.5f", 1)   # => "   1.00000"
      p sprintf("%10.5f", 10)  # => "  10.00000"

ưλؼ
(`e', `E', `g', `G')
ФƤ̣ͭޤ

      p sprintf("%10.5e", 1)   # => "1.00000e+00"
      p sprintf("%10.5e", 10)  # => "1.00000e+01"
      p sprintf("%10.5g",  10)  # => "        10"
      p sprintf("%#10.5G", 10)  # => "    10.000"

ʸλؼ(`s', `p')
ФƤϰʸΤꤷĶʬڤΤƤޤ
٤ƱͤˤСɤΤ褦ʰФƤ⤽
ĹνϤԤȤˤʤޤ

      p sprintf("%10.2s", "foo")  # => "        fo"

      p sprintf("%5.5s", "foo")     # => # => "  foo"
      p sprintf("%5.5s", "foobar")  # => # => "fooba"

٤Ȥ `*' ꤹ٤ͤ뤳Ȥˤʤޤ

      p sprintf("%.5s", "foobar")    # => "fooba"
      p sprintf("%.*s", 5, "foobar") # => "fooba"

== ؼ

ؼҤϰηβ򼨤ޤؼҤά뤳ȤϤǤޤ
ؼҤˤ礭ʬ

* ʸɽؼ: `c', `s', `p'
* ɽؼ: `d', `i', `u', `b', `o', `x', `X',
* ưɽؼ: `f', `g', `e', `E', `G'
ޤ

: c

  ο(0255)ʸɤȤߤʤбʸϤޤ
  ͡String nil, true, false ʳΥ֥ȤǤ to_int 
  ᥽åɤˤѴߤޤ

  ե饰 `-' ȡ
  λ̣ޤ

: s

  ʸϤޤ

   String ֥ȤǤʤ to_s ᥽åɤˤʸ
  ΤȤưޤ

: p

  ruby 1.8 feature:
  Object#inspect [Object/inspect] η̤Ϥޤ

        p sprintf("%s", [1, 2, 3])      # => "123"
        p sprintf("%p", [1, 2, 3])      # => "[1, 2, 3]"

: d
: i

  οͤ10ɽȤƽϤޤ

  Ǥʤдؿ Integer Ʊ§
  Ѵޤ

: u

  οͤʤȤߤʤ10ɽȤƽϤޤ

    p sprintf("%u", -1) # => "..4294967295"

  ϡp ".." + 0xffff_ffff.to_s ϤƤޤ

  ruby 1.7 feature: version 1.7 Ǥϡ".." ϡղäޤ
  '%u' ϡĹȤߤʤ n Ф
        printf("%u", n)
  ϡ
        printf("%d", n & ~(-1 << n.size*8))
  Ʊ̣ˤʤޤ

: b
: o
: x
: X

  򤽤줾2ʡ8ʡ16ʡ16(ʸ)ɽʸǽϤޤ

  `#' ե饰ꤹ "0b", "0", "0x", "0X" Ƭղäޤ

  `+', ` ' ե饰ʤ硢οˤ ".." Ƭ(`#' ե饰 
  "0x" ʤɤθ)ղäޤϺǾ̷ʸ̵¤³Ȥ
  ̣2ɽοɽƤޤ

     p sprintf("%#b", 10)    # => "0b1010"
     p sprintf("%#o", 10)    # => "012"
     p sprintf("%#x", 10)    # => "0xa"

     # οФ ".." ղäޤ
     p sprintf("%#b", -1)    # => "0b..1"
     p sprintf("%#o", -1)    # => "0..7"
     p sprintf("%#x", -1)    # => "0x..f"

     p sprintf("%10x", -1)   # => "       ..f"
     p sprintf("%-10x", -1)  # => "..f       "

     # ١פꤷ硢".." ղäޤ
     p sprintf("%.10x", -1)  # => "ffffffffff"

: f
: e
: E
: g
: G

  `f' Ͼɽ(xxx.xxx)ǿͤϤޤ

  `e' ϻؿɽ(x.xxxe+xx)ǿͤϤޤ

  `g'  ؿ -4 꾮ٰʾξ `e' ƱϤ򤽤
  Ǥ `f' ƱϤԤޤ0ϼ
  ޤ

  ʸλؼ(`E', `G')ϽϤΥե٥åȤʸˤޤ

    p sprintf("%f", 1.0) # => "1.000000"
    p sprintf("%e", 1.0) # => "1.000000e+00"
    p sprintf("%g", 1.0) # => "1"

    p sprintf("%f", 10.1) # => "10.100000"
    p sprintf("%e", 10.1) # => "1.010000e+01"
    p sprintf("%g", 10.1) # => "10.1"

    p sprintf("%g", 10 ** 6)  # => "1e+06"
    p sprintf("%g", 10 ** -5) # => "1e-05"

  ٤ξάͤ 6 Ǥ

  ̵硢NaN(Not a Number) ФϤϰʲΤȤǤ

        p sprintf("%f",  1.0/0)  # => "inf"
        p sprintf("%f", -1.0/0)  # => "-inf"
        p sprintf("%f",  0.0/0)  # => "nan"

        p sprintf("%E",  1.0/0)  # => "INF"
        p sprintf("%E", -1.0/0)  # => "-INF"
        p sprintf("%E",  0.0/0)  # => "NAN"
== 

٤㤤ΤǺǸޤ

: nth$

  nthܤΰΥեޥåȤԤȤ򼨤ޤ

        p sprintf("%1$d, %1$x, %1$o", 10)
        => "10, a, 12"

        p sprintf("%3$d, %2$x, %1$o", 1, 2, 3)
        => "3, 2, 1"

  ˤäƥեޥåȤѤνѤʤ˻
  Ѥޤ

        case ENV['LC_TIME']
        when /^ja_JP/
           fmt = "%1$dǯ%2$d%3$d"
        else
           fmt = "%2$02d/%03$2d/%1$02d"
        end

        p sprintf(fmt, 1, 4, 22)
        => "04/22/01"

  "*" θ˻ꤹ뤳Ȥǡפ
  ١פǻꤹ뤳ȤǤޤ

        p sprintf("%5.2f", 1);              # => " 1.00"
        p sprintf("%*.*f", 5, 2, 1);        # => " 1.00"
        p sprintf("%1$*2$.*3$f", 1, 5, 2);  # => " 1.00"