我有一个字符串input = "2 + 3",我想转换为"2.0 + 3.0".我用以下两种复杂的方法实现了这个目标:
floats = input.scan(/\d+/).map(&:to_f)
operator = input.scan(/[+,\-,*,\/]/)
operator.unshift(floats.first.to_s)
.push(floats.last.to_s).join(' ')
#=> "2.0 + 3.0"
Run Code Online (Sandbox Code Playgroud)
要么:
input.split(/\s+/)
.map{|i| ['+','-','*','/'].include?(i) ? i : i.to_f }
.join(' ')
#=> "2.0 + 3.0"
Run Code Online (Sandbox Code Playgroud)
有更简单或更好的方法吗?
我假设你只是在讨论转换整数,而所有其他答案都假设字符串只包含整数.我会选择:
'1.0 + 2/4.5 - 15'.gsub(/(?<![\.\d])\d+(?![\.\d])/) { |m| "#{m}.0" }
#? "1.0 + 2.0/4.5 - 15.0"
Run Code Online (Sandbox Code Playgroud)