2013-09-02 1 views
2

У меня есть номер, хранящийся в виде укуса, например. "2,65424.00" Есть ли способ конвертировать его в плавающий номер 2,65424.00 и сохранить формат?Строка Ruby для номера сохраняется формат

+0

То есть необычный формат числа. Вопрос также немного запутанный - не могли бы вы рассказать, возможно, просто объясните, откуда ваши данные, и где вы хотите его отобразить? Если вы хотите использовать это значение как число, ожидаете ли вы выполнить какие-либо математические операции над ним (в этом случае он не может отображаться точно так же). Номера Ruby не содержат сохраненный формат, но есть много способов отображения их форматирования. Но также очень легко отобразить строку без кавычек, если это все, что вам нужно сделать. Просто 'puts s' (где' '' ваша строка). –

+1

№ '2,65424.00' не является допустимым выражением Ruby. Другими словами, такого объекта Ruby не существует. Следовательно, нет способа преобразовать строку в такую ​​вещь. – sawa

ответ

0

Попробуйте преобразовать ваш строковый объект с помощью string.to_i для целого числа или string.to_f для поплавка.

+0

Хм вы правы .. но не помогите OP ... :) –

2

Нет, внутреннее представление не может быть изменено следующим образом. Единственный способ подойти к этому, чтобы написать метод to_s для Float и Fixnum. Например:

class Float 
    def to_s 
    # your formatting: sprintf("...", self) 
    end 
end 

Поскольку вы хотите сделать получить те же представления о Fixnum можно затем преобразовать Fixnum в Float, а затем основывать to_s метод на to_s метода Float.

class Fixnum 
    def to_s 
    self.to_f.to_s 
    end 
end 

Таким образом, вы получите представление, через вызова to_s на вашем Float

265424.to_s 
=> "2,65424.00" 

, или при использовании интерполяции:

"When you write it like this #{265424}" 
=> "When you write it like this 2,65424.00" 

На мой взгляд, это правильный подход , потому что вам нужно индивидуальное представление ваших номеров. Это хорошо, но тогда это индивидуальное представление должно быть реализовано на уровне строк, потому что, если вы хотите хорошо отобразить что-то через формирование, для этого нужны строки.

Также может оказаться сомнительным использование этого подхода к подделке обезьян, это зависит от того, хотите ли вы предоставить библиотеку и т. Д. Может быть, было бы хорошо, если бы вы просто разработали специальный формат, который принимает номера и печатает их в формате.

1
You can not save float value with ',' as a delimiter in mysql 

Однако вы можете сделать что-то вроде следующего

"2,65424.00".gsub(',', '').to_f # 265424.0 
+0

Thats true. '% .2f'% '2,65424.00'.delete (', '). To_f Вы также можете использовать это. –

Смежные вопросы