Ubah string dengan koma menjadi integer

95

Apakah ada metode yang tepat untuk mengubah "1,112" menjadi bilangan bulat 1112, bukan 1?

Saya punya satu, tapi tidak rapi:

"1,112".split(',').join.to_i #=> 1112
mCY
sumber

Jawaban:

175

Bagaimana dengan ini?

 "1,112".delete(',').to_i
Michael Kohl
sumber
Terima kasih atas jawaban anda. Ini jauh lebih baik dariku. Sebenarnya saya berharap akan ada satu panggilan, bukan dua. seperti: "1.112" .to_money. Setelah meninjau jawabannya, kemungkinan besar tidak ada metode seperti itu. Terima kasih banyak!
mCY
@michealKohi dapatkah Anda memberi tahu saya Mengapa delete () jauh lebih cepat daripada melakukan hal yang sama di gsub yang menerima regex, saya selalu berpikir cara regex lebih cepat. Saya telah menjalankan Benchmark pada keduanya karena perbedaan besar dalam waktu eksekusi.
Abhinay
1
@Abhinay Mengenai tanda bangku Anda: ukuran sampel? Ukuran string?
Michael Kohl
5

Anda mungkin juga ingin memastikan bahwa kode Anda dilokalkan dengan benar, atau pastikan pengguna terbiasa dengan notasi "internasional". Misalnya, "1.112" sebenarnya berarti nomor yang berbeda di berbagai negara. Di Jerman itu berarti jumlahnya sedikit lebih dari satu, bukan seribu dan sesuatu.

Artikel Wikipedia terkait ada di http://en.wikipedia.org/wiki/Decimal_mark . Tampaknya saat ini ditulis dengan buruk. Sebagai contoh sebagai orang Cina saya tidak yakin dari mana asal deskripsi tentang seribu pemisah ini di Cina.

Yì Yáng
sumber
4

Beberapa lebih nyaman

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

itu membuat "1 200 200" bekerja dengan baik juga

Alexey Novikov
sumber
8
Bahkan lebih baik '1,1200.00'.gsub(/[^0-9\.]/,'').to_f.
Hauleth
7
Tunggu, mengapa Anda ingin beralih "1,1200.00"ke "1120000"? Tidakkah Anda hanya ingin mengganti ,(atau, tergantung pada lokalnya, the .)? Juga, ini tidak mengubahnya menjadi integer atau float, hanya string tanpa pembatas.
brymck
3
@ Bryan: Untuk menebak, Anda mungkin ingin melakukan ini di aplikasi perbankan, saat mengonversi jumlah mata uang yang dimasukkan pengguna, untuk menangani hanya bilangan bulat di dalam aplikasi: misalnya, mengubah dolar dan sen menjadi sen . Metode ini akan menghindari kesalahan pembulatan yang mungkin muncul secara tidak terduga saat berhadapan dengan angka floating-point. Ketika jumlah mata uang perlu ditampilkan kepada pengguna, jumlah sen dapat dikonversi ke dolar dan sen. (Meskipun bukan itu yang ditanyakan penanya.)
Teemu Leisti
2
Jawaban ini bahkan tidak menjawab permintaan penanya untuk mengubah string menjadi integer atau float.
LS
2

Berikut ini adalah metode lain yang akan berfungsi, meskipun seperti beberapa metode lain, metode ini akan menghapus tempat desimal.

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

Saya akan menggunakan String#tr:

"1,112".tr(',','').to_i # => 1112
Arup Rakshit
sumber
1

Jika seseorang ingin menggunakan lebih dari koma, saya penggemar:

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

tidak tahu tentang kinerja tetapi, itu lebih fleksibel daripada gsub, yaitu:

"1-200".chars.grep(/\d/).join.to_i
davidpm4
sumber
0
String count = count.replace(",", "");
Ajay Rathore
sumber