2016-10-08 42 views
1

我想了解sprintf如何工作。Sprintf標誌和寬度 - 紅寶石

望着這裏的documentation的格式/語法%[flags][width][.precision]type

我試圖理解我的代碼在這裏:

format('%02.2f', monthly_payment) 

重點%02.2f我明白.2f意味着舍入爲兩位小數浮動,但什麼%02的意思是?

其分解這樣的:

  • 0 - 旗
  • 2 - 寬度
  • 2-精度
  • 的F - 型

任何人都可以在解釋這一個外行的(爲了更好地理解這個概念),我可以嘗試一下irb嗎?

+0

查找「用零墊」和在[內核#的sprintf]「寬度的例子」(http://ruby-doc.org/core -2.3.0/Kernel.html#method-i-sprintf)。 –

+0

我做了但沒有具體的信息。希望你能幫助我。 –

+0

@ Max的回答應該爲你澄清事情。 –

回答

2

%02.2f

有以下部分:

  • 02被分成兩個部分:
    • 0是標誌
    • 2是最小寬度
  • .2:精度(零的量)
  • f:類型(浮點)

%2.0%02.0之間的區別是該標誌。如果給出,那麼最小寬度將由左填充零執行。否則,空格將被填充。

您可以改爲使用-

請注意,最小寬度將包含小數空格(如果有)。

爲了給出一些示例以字符串'1'

format('%2f', "1") 
=> "1.000000" 
# Here I'm only specifying that the length is 'at least 2'. 

format('%2.0f', "1") 
=> " 1" 
# min-width of 2, precision of zero, and padding with whitespace 

format('%.2f', "1") 
=> "1.00" 
# just set precision, don't set min-width 

format('%02.0f', "1") 
=> "01" 
# min-width of 2, precision of zero, and padding with zeroes 

format('%-2.0f', "1") 
=> "1 " 
# using a dash to right pad 

format('%-02.0f', "1") 
=> "1 " 
# when '-' is used the 0 flag will still pad with whitespace 

format('%2.2f', "1") 
=> "1.00" 
# min-width of 2 and precision of 2 

format('%5.2f', "1") 
=> "01.00" 
# min-width of 5, precision of 2, padding with whitespace