ruby 字符串格式化、進制轉換、小數位數控制

第一:ruby 字符串格式化和進制轉換

"%05d" % 123 結果是 "00123"
"%02X" % 10 結果是 "0A"
"%03x" % 10 結果是 "00a"
"%010x" % 10 結果是 "000000000a" (前綴9個0)
"%10x" %10 結果是 "         a"  (前綴9個空格)

可以看出 第一個數字是前綴,然後是長度,然後x表16進制,d表示10進制。


堪稱奇技淫巧吧,但是ruby的奇技淫巧,用的很是地方,給開發帶來了極大的效率,讓語言優雅而簡潔~


以上轉載自:http://www.cnblogs.com/coderlee/archive/2008/04/08/1142704.html

ps:長度不是必填項。適用於十進制轉換至16進制,格式化字符串

另:16進制轉換至10進制的方法如下:

 'ff'.to_i(16)

最後貼出自己寫的ruby 實現ip轉數字  數字轉ip的代碼,有很多地方待改進。

#數字轉ip=》先將數字轉換爲16進制,然後拆分轉十進制
def conver_ip(data)
	@str="%x" % data
	@[email protected]
	# p @str,@str.length
	ip1=(@str[1]+@str[0]).to_i(16).to_s
	ip2=(@str[3]+@str[2]).to_i(16).to_s
	ip3=(@str[5]+@str[4]).to_i(16).to_s
	if @str.length <= 7
		ip4=@str[6].to_i(16).to_s
	else 
		ip4=(@str[7]+@str[6]).to_i(16).to_s
	end
	puts ip4+"."+ip3+"."+ip2+"."+ip1
end
#ip轉數字=》先將ip拆分轉16進制,連接後轉十進制
def ip_conver(str_ip)
	@ip_16=''
	str_ip.split('.').each do |k|
		k="%02x" % k
		@ip_16=@ip_16+k.to_s
	end
	puts @ip_16.to_i(16)
end
#測試通過
conver_ip('16777471')
ip_conver('1.0.0.255')

第二:小數位數控制

兩種方法:

1. ruby的Kernal.sprintf()可以實現保留兩位小數的方法,format是sprintf的alias。format(pattern, value):其中pattern表示要格式化形式,在這裏我們用“%.2f”,表示保留小數點後2位數字,當然我們還可以寫成“%05.2f”,表示整個字符串最少5位數(不包括小數點),如果value少於5位用”0”佔位。

eg: "%0.2f"% 11.329     or     format("%0.2f", 11.329)    

2. 11.329.round(1)   ----->  11.3      11.329.round(2)   ----->  11.33

  
第三:轉義字符

  1. strstr = str.gsub('<', '&lt;')  
  2. strstr = str.gsub('>', '&gt;')  
  3. strstr = str.gsub(/['"]/, '&quot;')  
  4. strstr = str.lstrip                            #去掉前後空格  
  5. strstr = str.delete("\n\r")                #去掉換行符  
  6. strstr = str.delete(" ")                    #去掉tab  


發佈了19 篇原創文章 · 獲贊 4 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章