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

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

sprintf格式

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

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

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

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

若想輸出`%'本身時(shí), 請(qǐng)這樣`%%'處理。

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

標(biāo)識(shí)符

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

#

使用2進(jìn)制、8進(jìn)制、16進(jìn)制的指示符(`b', `o', `x', `X')時(shí), 會(huì)分別添加"0b", "0", "0x", "0X"前綴。

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

對(duì)于浮點(diǎn)數(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'除了具有上述特性外, 還會(huì)在末尾添加多余的0。

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

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

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

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

與`+'相同, 用空格來(lái)代替正號(hào)`+'。它只對(duì)數(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)容靠右時(shí), 使用`0'而并非空格來(lái)填充多余部分。

它只對(duì)數(shù)值指示符(`d', `i', `b', `o', `x', `X', `u', `f', `g', `G')起作用(對(duì)`e', `E'無(wú)效)

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

與`#'一起使用時(shí), 輸出情況如下。

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"

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

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

寬度

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

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

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

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

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

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

精度

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

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

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

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

若遇到浮點(diǎn)數(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')的話,將會(huì)按照精度的規(guī)定來(lái)檢查參數(shù)中的字符串長(zhǎng)度,并切除多余部分。若將寬度和精度設(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ù)的類(lèi)型,且是必選的。大體說(shuō)來(lái)它包括:

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

這幾類(lèi)。

c

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

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

s

輸出字符串。

若參數(shù)并非String對(duì)象的話,將使用to_s方法對(duì)其進(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ù)值看作是無(wú)符號(hào)整數(shù),并以10進(jìn)制整數(shù)的形式輸出它。

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

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

ruby 1.7 特性: 在version 1.7中,不會(huì)附加".."。若是'%u'的話,則將參數(shù)看作是定長(zhǎng)整數(shù)。此時(shí),對(duì)于負(fù)整數(shù)n來(lái)說(shuō)

printf("%u", n)

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

是一個(gè)意思。

b
o
x
X

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

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

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

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

# 對(duì)負(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       "

# 若指定了"精度"的話,則不會(huì)添加".."
p sprintf("%.10x", -1)  # => "ffffffffff"
f
e
E
g
G

`f' 以小數(shù)點(diǎn)形式(xxx.xxx)輸出數(shù)值。

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

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

大寫(xiě)字母指示符(`E', `G')會(huì)將輸出中的字母變?yōu)榇髮?xiě)形式。

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。

若遇到無(wú)限大值或NaN(Not a Number)時(shí),輸出情況如下。

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個(gè)參數(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ù)來(lái)設(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"

前の記事: 次の記事: