将Ruby字符串转换为十进制数

3

如何将"$ 10.80"转换为十进制?使用正则表达式吗?


“decimal”是什么意思?是指任意精度浮点数吗? - Jan
7个回答

6
也许这不是最好的方法,但这里有一个可行的方法:

"$ 10.80".match(/[0-9|\.]+/)[0].to_f

不错的解决方案。可以用它从任何字符串中提取十进制值。谢谢。 - TonyTakeshi

6
s = "$ 10.80"
BigDecimal.new s.match(/(\d+\.\d+)/)[1]

将您的值作为 BigDecimal 返回,以保留精度。


如果您想保留精度,为什么不使用BigDecimal呢? - d11wtq

4

已经有几种解决方案了,但我想添加一个。

>> "$ 10.80"[/[\d\.]+/].to_f #=> 10.8

3
如果你知道它总是以$开头,那么只需将其删除,然后简单地使用to_f即可。

"$ 10.00"[1..-1].to_f


这个。为什么要让问题变得比必要的更复杂呢? - Tyler K

2

可能更容易理解的正则表达式代码:

"$ 10.80".split(' ')[1].to_f

1

这个解决方案匹配任何浮点数(包括例如“$ .89”),并保留精度:

require 'bigdecimal'

s = "$ 10.80"

puts BigDecimal.new(s.match(/\d*\.?\d+/)[0]).to_s('F')  # 10.8

0

你甚至可以使用 split 方法。

"$ 10.80".split(' ')[1].to_f

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接