class String
def numeric_string?
Float(self) != nil rescue false
end
def to_numeric
if self.numeric_string?
if self.index('.')
return self.to_f
else
return self.to_i
end
end
end
end
['2.0', '15', '4500.1234', '111.234'].each do |str|
puts str.to_numeric
end
# 2.0
# 15
# 4500.1234
# 111.234
8条答案
按热度按时间svujldwt1#
在字符串上使用
to_i
或to_f
31moq8wy2#
这是一个常见的练习。可能有更优雅的方法来做到这一点,但这是最简单的一个班轮,我来了。
请记住,mod运算符并不完全精确。但在这种情况下,它应该对任何字符串化的数字都有效。
rnmwe5a23#
从Ruby 2.6开始,全局
Integer()
和Float()
转换方法有一个exception
参数,你可以利用它轻松地链接这两个方法:x4shl7ld4#
如果你只是想避免在输入看起来像浮点数时显示小数,你可以将输入转换为浮点数,然后使用
'%g'
来显示数字。你可能会得到意想不到的行为,或者不得不写一些逻辑来检查你的Numeric是Float还是Analog。
mmvthczy5#
这将用两个新方法扩展String,但你只需要对任何字符串调用
#to_numeric
,它将相应地返回一个浮点数或一个int。希望这对你有帮助!
mpgws1up6#
您可以使用
to_f
函数和round
将字符串转换为具有精确小数位的浮点数。例如,我打印的文本有关频率值在.pdf文件。原始数据为string
。这将导致,原始文本如
7.13500
将转换为7.135
。如果我们尝试直接将值round
,它将返回错误,就像在string
中一样。因此,我们需要先将其转换为float,然后再确定小数位。vfwfrxfs7#
我会使用:用途:
它是如何工作的?
Integer()
和Float()
是Kernel类中的方法,因此返回方法对象,允许
call
向其发送input
值。如果成功,则返回值,each
循环终止。如果它爆炸,rescue ArgumentError
将其捕获,each
循环继续。如果循环结束时没有被return
短路,那么nil
将被Ruby返回。j8yoct9x8#
你可以这样做:
第一行确保您总是根据输入获得结果。如果你删除它,一个空字符串将产生0而不是错误。