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

Jawaban:


175

Bagaimana dengan ini?

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

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.


4

Beberapa lebih nyaman

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

itu membuat "1 200 200" bekerja dengan baik juga


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


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

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.