Converti la stringa con la virgola in numero intero


95

Esiste un metodo accurato per convertire "1,112" nell'intero 1112, invece di 1?

Ne ho uno, ma non pulito:

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

Risposte:


175

Cosa ne pensi di questo?

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

Grazie per la tua risposta. È molto meglio del mio. In effetti speravo che ci sarebbe stata una chiamata invece di due. come: "1,112" .to_money. Dopo aver esaminato le risposte, è probabile che non esista un tale metodo. Comunque, grazie mille!
mCY

@michealKohi puoi dirmi perché delete () è molto più veloce di fare lo stesso in gsub che accetta regex, ho sempre pensato che il modo regex sia più veloce. Ho eseguito Benchmark su entrambi per la sua enorme differenza nel tempo di esecuzione.
Abhinay

1
@ Abhinay Per quanto riguarda i tuoi punti di riferimento: dimensione del campione? Dimensione della stringa?
Michael Kohl

5

Puoi anche assicurarti che il tuo codice venga localizzato correttamente o assicurarti che gli utenti siano abituati alla notazione "internazionale". Ad esempio, "1.112" in realtà significa numeri diversi nei diversi paesi. In Germania significa il numero poco più di uno, invece di mille e qualcosa.

L'articolo di Wikipedia corrispondente è all'indirizzo http://en.wikipedia.org/wiki/Decimal_mark . Sembra essere scritto male in questo momento però. Ad esempio, come cinese, non sono sicuro da dove provenga questa descrizione sui mille separatori in Cina.


4

Alcuni più convenienti

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

fa funzionare correttamente anche "1 200 200"


8
È ancora meglio '1,1200.00'.gsub(/[^0-9\.]/,'').to_f.
Hauleth

7
Aspetta, perché vorresti convertirti "1,1200.00"in "1120000"? Non vuoi semplicemente sostituire il ,(o, a seconda del locale, il .)? Inoltre, questo non lo converte in un numero intero o in un float, solo una stringa senza delimitatori.
brymck

3
@Bryan: Per azzardare un'ipotesi, potresti volerlo fare in un'applicazione bancaria, quando converti un importo in valuta che l'utente ha inserito, al fine di gestire solo numeri interi all'interno dell'applicazione: ad esempio, convertendo dollari e centesimi in centesimi . Questo metodo eviterà eventuali errori di arrotondamento che potrebbero verificarsi in modo imprevisto quando si tratta di numeri in virgola mobile. Quando un importo in valuta deve essere mostrato all'utente, l'importo in cent può essere convertito in dollari e centesimi. (Anche se non è questo ciò che l'interrogante ha chiesto.)
Teemu Leisti

2
Questa risposta non risponde nemmeno alla richiesta del richiedente di convertire la stringa in un numero intero o float.
LS

2

Il seguente è un altro metodo che funzionerà, sebbene come con alcuni altri metodi eliminerà le posizioni decimali.

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


1

Se qualcuno sta cercando di sottostare più di una virgola sono un fan di:

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

non so delle prestazioni ma è più flessibile di un gsub, ad esempio:

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

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.