2011-12-18 3 views
3

Как преобразовать "$ 10.80" в десятичный? С помощью регулярного выражения?Ruby Convert String to Decimal

+0

Что вы имеете в виду под "десятичной"? Произвольная точность с плавающей запятой? – Jan

ответ

6

Это может быть не самый лучший способ сделать это, но вот что-то, что работает:

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

Хорошее решение. Можно просто использовать это, чтобы извлечь десятичное значение из любой строки. Спасибо – TonyTakeshi

1

Этот soluiton соответствует любому числу с плавающей запятой (в том числе, например, «$ 0,89») и сохраняет точность:

require 'bigdecimal' 

s = "$ 10.80" 

puts BigDecimal.new(s.match(/\d*\.?\d+/)[0]).to_s('F') # 10.8 
6
s = "$ 10.80" 
BigDecimal.new s.match(/(\d+\.\d+)/)[1] 

Возвращает ваше значение как BigDecimal для сохранения точности.

+0

Почему бы не использовать BigDecimal, если вы хотите сохранить точность? – d11wtq

+0

@ d11wtq, спасибо, хорошая точка, исправлена. – Jan

2

код, который может быть проще для понимания регулярных выражений неграмотных:

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

вы даже можете использовать метод расщепления.

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

Есть уже несколько решений, но я хотел бы добавить

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

Если вы знаете, что он всегда имеет $ в начале, а затем просто удалить, что и простой to_f будет делать ,

"$ 10,00" [1 ..- 1] .to_f

+0

Это. Почему вы усложнили проблему больше, чем необходимо? –