您的位置:首页 > 编程语言 > Ruby

ruby 字符串格式化、进制转换、小数位数控制

2012-08-15 16:47 871 查看
第一: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
@str=@str.reverse
# 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

  
第三:转义字符

strstr = str.gsub('<', '<')
 
strstr = str.gsub('>', '>')
 
strstr = str.gsub(/['"]/, '"')  

strstr = str.lstrip                            #去掉前后空格  

strstr = str.delete("\n\r")                #去掉换行符  

strstr = str.delete(" ")                    #去掉tab  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  ruby 语言 测试