2012-07-13 70 views

Trả lời

163

Làm thế nào về điều này?

"1,112".delete(',').to_i 
+0

Cảm ơn câu trả lời của bạn. Đó là cách tốt hơn nhiều so với tôi. Trong thực tế, tôi đã hy vọng sẽ có một cuộc gọi thay vì hai. như: "1,112" .to_money. Sau khi xem xét các câu trả lời, có thể không có phương pháp như vậy. Dù sao, cảm ơn rất nhiều! – mCY

+0

@michealKohi bạn có thể cho tôi biết Tại sao xóa() nhanh hơn nhiều so với thực hiện tương tự trong gsub chấp nhận regex, tôi luôn nghĩ rằng cách regex nhanh hơn. Tôi đã chạy Benchmark trên cả hai trên một sự khác biệt rất lớn của nó trong thời gian thực hiện. – Abhinay

+1

@Abhinay Về nhãn hiệu băng ghế dự bị của bạn: kích thước mẫu? Kích thước chuỗi? –

4

Một số thuận tiện hơn

"1,1200.00".gsub(/[^0-9]/,'') 

nó làm cho "1 200 200" làm việc đúng là tốt

+8

Thậm chí tốt hơn là '' 1,1200.00'.gsub (/ [^ 0-9 \.] /, ''). To_f'. – Hauleth

+7

Chờ, tại sao bạn muốn chuyển đổi "1,1200.00" thành '" 1120000 "? Bạn không chỉ muốn thay thế ',' (hoặc, tùy thuộc vào miền địa phương, '.')? Ngoài ra, điều này không chuyển đổi nó thành một số nguyên hoặc float, chỉ là một chuỗi không có dấu phân tách. – brymck

+3

@Bryan: Để mạo hiểm đoán, bạn có thể muốn thực hiện điều này trong ứng dụng ngân hàng, khi chuyển đổi số tiền mà người dùng đã nhập, để chỉ xử lý số nguyên bên trong ứng dụng: ví dụ: quy đổi đô la và xu xu. Phương pháp này sẽ tránh bất kỳ lỗi làm tròn nào có thể xén bất ngờ khi xử lý các số dấu phẩy động. Khi số tiền cần được hiển thị cho người dùng, số tiền có thể được chuyển đổi thành đô la và xu. (Mặc dù đó không phải là những gì người hỏi hỏi.) –

1

tôi sẽ làm gì sử dụng String#tr:

"1,112".tr(',','').to_i # => 1112 
5

Bạn cũng có thể muốn thực hiện đảm bảo rằng mã của bạn bản địa hóa chính xác hoặc đảm bảo người dùng được sử dụng để ký hiệu "quốc tế". Ví dụ: "1,112" thực sự có nghĩa là các số khác nhau trên các quốc gia khác nhau. Ở Đức nó có nghĩa là con số hơn một chút, thay vì một ngàn và một cái gì đó.

Bài viết tương ứng trên Wikipedia là http://en.wikipedia.org/wiki/Decimal_mark. Dường như nó được viết kém vào thời điểm này. Ví dụ như một người Trung Quốc, tôi không chắc những mô tả về hàng nghìn người phân tách ở Trung Quốc đến từ đâu.

1

Sau đây là một phương pháp khác sẽ hoạt động, mặc dù như với một số phương pháp khác, nó sẽ loại bỏ các vị trí thập phân.

a = 1,112 
b = a.scan(/\d+/).join().to_i => 1112 
0

Nếu ai đó đang tìm cách để phụ ra hơn một dấu phẩy Tôi là một fan hâm mộ của:

"1,200".chars.grep(/\d/).join.to_i 

dunno về hiệu suất nhưng, nó là linh hoạt hơn một gsub, ví dụ:

"1-200".chars.grep(/\d/).join.to_i 
Các vấn đề liên quan