国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

Verzeichnis suchen
Ruby用戶指南 3、開始 4、簡單的例子 5、字符串 6、正則表達(dá)式 7、數(shù)組 8、回到那些簡單的例子 9、流程控制 10、迭代器 11、面向?qū)ο笏季S 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ù)據(jù)類型:數(shù)字 4、數(shù)據(jù)類型:常量與變量 5、數(shù)據(jù)類型:字符串 6、控制語句:條件分歧語句 7、控制語句:循環(huán) 8、函數(shù) 9、對象與類 10、顯示圖片 11、數(shù)組 12、哈希表(關(guān)聯(lián)數(shù)組) 13、類 14、數(shù)據(jù)庫 15、游戲?qū)ο?/a> 16、精靈的管理 17、窗口的管理 18、活動指令 19、場景類 Programming Ruby的翻譯 Programming Ruby: The Pragmatic Programmer's Guide 前言 Roadmap Ruby.new 類,對象和變量 容器Containers,塊Blocks和迭代Iterators 標(biāo)準(zhǔn)類型 深入方法 表達(dá)式Expressions 異常,捕捉和拋出(已經(jīng)開始,by jellen) 模塊 基本輸入輸出 線程和進(jìn)程 當(dāng)遭遇挫折 Ruby和它的世界 Ruby和Web開發(fā) Ruby Tk Ruby 和微軟的 Windows 擴(kuò)展Ruby Ruby語言 (by jellen) 類和對象 (by jellen) Ruby安全 反射Reflection 內(nèi)建類和方法 標(biāo)準(zhǔn)庫 OO設(shè)計 網(wǎng)絡(luò)和Web庫 Windows支持 內(nèi)嵌文檔 交互式Ruby Shell 支持 Ruby參考手冊 Ruby首頁 卷首語 Ruby的啟動 環(huán)境變量 對象 執(zhí)行 結(jié)束時的相關(guān)處理 線程 安全模型 正則表達(dá)式 字句構(gòu)造 程序 變量和常數(shù) 字面值 操作符表達(dá)式 控制結(jié)構(gòu) 方法調(diào)用 類/方法的定義 內(nèi)部函數(shù) 內(nèi)部變量 內(nèi)部常數(shù) 內(nèi)部類/模塊/異常類 附加庫 Ruby變更記錄 ruby 1.6 特性 ruby 1.7 特性 Ruby術(shù)語集 Ruby的運行平臺 pack模板字符串 sprintf格式 Marshal格式 Ruby FAQ Ruby的陷阱
Figuren

sprintf格式

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

下面就對ruby的sprintf格式進(jìn)行詳細(xì)的說明。

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

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

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

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

標(biāo)識符

標(biāo)識符包括`#', `+', ` '(空格), `-'和`0'這5個。

#

使用2進(jìn)制、8進(jìn)制、16進(jìn)制的指示符(`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'的話, 則會為負(fù)數(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"
-

使輸出內(nèi)容靠左. 若尚未指定寬度的話,則不起作用。

0

當(dāng)輸出內(nèi)容靠右時, 使用`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"

通常情況下, 會輸出如下內(nèi)容。

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

寬度

以非0數(shù)字開頭的數(shù)串負(fù)責(zé)指定寬度。寬度是指生成字符串的寬度, 它不受后文中的精度的限制。

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

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

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

若將寬度指定為`*'時, 將從參數(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è)為同值的話,則只輸出參數(shù)字符串中的符合精度規(guī)定的部分。

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

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

若將精度設(shè)為`*'的話,將從參數(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)看作是字符代碼,并輸出對應(yīng)的字符。若參數(shù)并非數(shù)值、String、 nil, true或false的話,將嘗試用to_int方法進(jìn)行變換。

此時,只有標(biāo)識符`-'和"寬度"的設(shè)定是有效的。

s

輸出字符串。

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

p

ruby 1.8 特性: 輸出Object#inspect的結(jié)果。

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

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

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

u

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

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

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

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

printf("%u", n)

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

是一個意思。

b
o
x
X

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

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

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

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

# 對負(fù)數(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' 的情況比較特殊。當(dāng)指數(shù)小于-4或者超出精度范圍時,它采用`e'方式進(jìn)行輸出。除此之外,它采用`f'方式進(jìn)行輸出。另外,它會刪除小數(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ù)進(jìn)行格式化操作。

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ù)來設(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"

Vorheriger Artikel: N?chster Artikel: