亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

?? ??? ??
Ruby用戶指南 3、開始 4、簡單的例子 5、字符串 6、正則表達式 7、數(shù)組 8、回到那些簡單的例子 9、流程控制 10、迭代器 11、面向對象思維 12、方法 13、類 14、繼承 15、重載方法 16、訪問控制 17、單態(tài)方法 18、模塊 19、過程對象 20、變量 21、全局變量 22、實變量 23、局部變量 24、類常量 25、異常處理:rescue 26、異常處理:ensure 27、存取器 28、對象的初始化 29、雜項 RGSS入門教程 1、什么是RGSS 2、開始:最簡單的腳本 3、數(shù)據類型:數(shù)字 4、數(shù)據類型:常量與變量 5、數(shù)據類型:字符串 6、控制語句:條件分歧語句 7、控制語句:循環(huán) 8、函數(shù) 9、對象與類 10、顯示圖片 11、數(shù)組 12、哈希表(關聯(lián)數(shù)組) 13、類 14、數(shù)據庫 15、游戲對象 16、精靈的管理 17、窗口的管理 18、活動指令 19、場景類 Programming Ruby的翻譯 Programming Ruby: The Pragmatic Programmer's Guide 前言 Roadmap Ruby.new 類,對象和變量 容器Containers,塊Blocks和迭代Iterators 標準類型 深入方法 表達式Expressions 異常,捕捉和拋出(已經開始,by jellen) 模塊 基本輸入輸出 線程和進程 當遭遇挫折 Ruby和它的世界 Ruby和Web開發(fā) Ruby Tk Ruby 和微軟的 Windows 擴展Ruby Ruby語言 (by jellen) 類和對象 (by jellen) Ruby安全 反射Reflection 內建類和方法 標準庫 OO設計 網絡和Web庫 Windows支持 內嵌文檔 交互式Ruby Shell 支持 Ruby參考手冊 Ruby首頁 卷首語 Ruby的啟動 環(huán)境變量 對象 執(zhí)行 結束時的相關處理 線程 安全模型 正則表達式 字句構造 程序 變量和常數(shù) 字面值 操作符表達式 控制結構 方法調用 類/方法的定義 內部函數(shù) 內部變量 內部常數(shù) 內部類/模塊/異常類 附加庫 Ruby變更記錄 ruby 1.6 特性 ruby 1.7 特性 Ruby術語集 Ruby的運行平臺 pack模板字符串 sprintf格式 Marshal格式 Ruby FAQ Ruby的陷阱
??

sprintf格式

Ruby的sprintf格式與C語言的sprintf(3)基本相同。但還是有些差別: 它沒有針對C特有類型的修飾符,如short或long等; 它包含2進制數(shù)的指示符(%b); 它不支持sprintf的方言式的語法。

下面就對ruby的sprintf格式進行詳細的說明。

sprintf格式的規(guī)格如下所示。[]中的部分是可選的。

%[指定參數(shù)$][標識符][寬度][.精度]指示符

若想輸出`%'本身時, 請這樣`%%'處理。

下面就分別介紹一下各元素的用法。

標識符

標識符包括`#', `+', ` '(空格), `-'和`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"

對于浮點數(shù) (`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"
+

使輸出字符串帶上符號。如果是正數(shù)的話, 就會添加`+'。它只對數(shù)值指示符(`d', `i', `b', `o', `x', `X', `u', `f', `e', `E', `g', `G')起作用。另外, 如果是`b', `o', `x', `X', `u'的話, 則會為負數(shù)添加`-'。

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

p sprintf("%x", -1)  # => "..f"  # ".." 表示f無限延續(xù)
p sprintf("%+x", -1) # => "-1"
' '(空格)

與`+'相同, 用空格來代替正號`+'。它只對數(shù)值指示符(`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'而并非空格來填充多余部分。

它只對數(shù)值指示符(`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數(shù)字開頭的數(shù)串負責指定寬度。寬度是指生成字符串的寬度, 它不受后文中的精度的限制。

確定寬度時, 也會考慮標識符中附加的" ", "+","-", "0b", "0", "0x", "0X"的長度。

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

寬度是指"必要的最小寬度". 若結果字符串的寬度超過指定寬度時, 指定寬度就會失效。

若將寬度指定為`*'時, 將從參數(shù)中取得寬度值。

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

精度

緊跟在"."后面的數(shù)串表示精度(若只有"."的話,則為".0")。若遇到整數(shù)的指示符(`d', `i', `b', `o', `x', `X', `u')的話,精度表示數(shù)值部分的長度。

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

若遇到浮點數(shù)的指示符(`f')的話,它表示小數(shù)部分的位數(shù)。

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

若遇到浮點數(shù)的指示符(`e', `E', `g', `G')的話,它表示有效位數(shù)。

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')的話,將會按照精度的規(guī)定來檢查參數(shù)中的字符串長度,并切除多余部分。若將寬度和精度設為同值的話,則只輸出參數(shù)字符串中的符合精度規(guī)定的部分。

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

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

若將精度設為`*'的話,將從參數(shù)中提取精度的值。

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

指示符

指示符指出參數(shù)的類型,且是必選的。大體說來它包括:

  • 表示字符串的指示符: `c', `s', `p'
  • 表示整數(shù)的指示符: `d', `i', `u', `b', `o', `x', `X',
  • 表示浮點數(shù)的指示符: `f', `g', `e', `E', `G'

這幾類。

c

將參數(shù)的數(shù)值(0×255)看作是字符代碼,并輸出對應的字符。若參數(shù)并非數(shù)值、String、 nil, true或false的話,將嘗試用to_int方法進行變換。

此時,只有標識符`-'和"寬度"的設定是有效的。

s

輸出字符串。

若參數(shù)并非String對象的話,將使用to_s方法對其進行變換。

p

ruby 1.8 特性: 輸出Object#inspect的結果。

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

以10進制整數(shù)的形式輸出參數(shù)中的數(shù)值。

若參數(shù)并非整數(shù),則使用與Integer函數(shù)相同的規(guī)則將其變?yōu)檎麛?shù)。

u

將參數(shù)的數(shù)值看作是無符號整數(shù),并以10進制整數(shù)的形式輸出它。

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

上面的代碼會輸出 p ".." + 0xffff_ffff.to_s。

ruby 1.7 特性: 在version 1.7中,不會附加".."。若是'%u'的話,則將參數(shù)看作是定長整數(shù)。此時,對于負整數(shù)n來說

printf("%u", n)

printf("%d", n & ~(-1 << n.size*8))

是一個意思。

b
o
x
X

分別以2進制、8進制、16進制、16進制(大寫字母)字符串的形式輸出整數(shù)。

若使用了`#' 標識符的話,則分別在前面添加"0b", "0", "0x", "0X"。

若沒有使用`+', ` ' 標識符時,將在負數(shù)的前面(若有`#' 標識符,則在"0x"等的后面)添加".."。這表示最高位字符無限延伸,它采用了2的補數(shù)形式來表現(xiàn)負數(shù)。

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

# 對負數(shù)添加".."
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' 以小數(shù)點形式(xxx.xxx)輸出數(shù)值。

`e' 以指數(shù)形式(x.xxxe+xx)輸出數(shù)值。

`g' 的情況比較特殊。當指數(shù)小于-4或者超出精度范圍時,它采用`e'方式進行輸出。除此之外,它采用`f'方式進行輸出。另外,它會刪除小數(shù)部分尾部的0。

大寫字母指示符(`E', `G')會將輸出中的字母變?yōu)榇髮懶问健?/p>

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"

指定參數(shù)

這部分的利用頻率最低,所以放在最后。

nth$

表示將使用第nth個參數(shù)進行格式化操作。

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"

若您不想改變參數(shù)的順序而只想改變格式的話,也可以使用它。

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"

您也可以先插入"*",然后借用參數(shù)來設定"寬度"和"精度"的值。

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"

?? ??: ?? ??: