2015-04-12 16 views
2

У меня есть 3 строковые переменные, которые мне нужно добавить. a = "5.21", b = "5.22" и c = "5.23". Когда я пытаюсь добавить я получить строку, мне нужно численное значениеRuby: Convert String to Float

Я попытался следующие

a = a.to_f => 5.2 
b = b.to_f => 5.2 
c = c.to_f => 5.2 
sum = a + b + c => 15.6 

Как я могу получить выход 15.66. пожалуйста, помогите

+0

Уверены ли вы, что ваши параметры 'a',' b' и 'c' не установлены на« 5.2 »? ... похоже, что метод #to_f должен возвращать другое значение. Может быть, значения меняются какой-то строкой кода, которую вы не заметили ...? – Myst

+0

Я подозреваю, что у вас есть один или несколько невидимых символов в ваших строках. Попробуйте это и сообщите результат: '.each_char {| c | puts c.ord} '. Откуда взялись значения 'a',' b' и 'c'? –

ответ

4

Попытайтесь использовать Ruby's in Enumerable методов. Попробуйте следующее:

a = "5.21" 
b = "5.22" 
c = "5.23" 

[a, b, c].map(&:to_f).inject(:+) 
#=> 15.66 
+0

Я использую 2.0.0, и я получаю 15.6 с использованием вышеуказанного решения – napsterdsilva

+0

Уверены ли вы, что нет другого кода, изменяющего эти переменные? Кроме того, являются ли их значения такими же, как строки, которые вы дали? Если в строке есть другие, нецифровые символы, они могут иметь непреднамеренное поведение. См. Http://ruby-doc.org/core-2.2.0/String.html#method-i-to_f – garythegoat

+0

Я читаю это значение из приложения android Как только я прочитаю значение из приложения, просто чтобы убедиться его строка я вызываю методы a = a.to_s.strip. то a = a.to_f. Это все равно возвращает jus 5.0, хотя в этом случае строка была 5,00 – napsterdsilva