Konvertieren Sie eine Zeichenfolge mit Komma in eine Ganzzahl


95

Gibt es eine nette Methode, um "1.112" in eine ganze Zahl 1112 anstelle von 1 umzuwandeln?

Ich habe eine, aber nicht ordentlich:

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

Antworten:


175

Wie wäre es damit?

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

Danke für deine Antwort. Es ist viel besser als meins. Tatsächlich hatte ich gehofft, dass es einen Anruf statt zwei geben würde. wie: "1.112" .to_money. Nach Durchsicht der Antworten gibt es wahrscheinlich keine solche Methode. Trotzdem vielen Dank!
mCY

@michealKohi Kannst du mir sagen, warum delete () viel schneller ist als dasselbe in gsub, das Regex akzeptiert? Ich habe immer gedacht, dass Regex schneller ist. Ich habe Benchmark für beide ausgeführt, da es einen großen Unterschied in der Ausführungszeit gibt.
Abhinay

1
@Abhinay Bezüglich Ihrer Benchmarks: Stichprobengröße? Stringgröße?
Michael Kohl

5

Möglicherweise möchten Sie auch sicherstellen, dass Ihr Code korrekt lokalisiert ist, oder dass die Benutzer an die "internationale" Notation gewöhnt sind. Zum Beispiel bedeutet "1.112" tatsächlich unterschiedliche Zahlen in verschiedenen Ländern. In Deutschland bedeutet das etwas mehr als eins statt tausend und so.

Der entsprechende Wikipedia-Artikel befindet sich unter http://en.wikipedia.org/wiki/Decimal_mark . Es scheint jedoch zu diesem Zeitpunkt schlecht geschrieben zu sein. Als Chinese bin ich mir zum Beispiel nicht sicher, woher diese Beschreibung über tausend Trennzeichen in China stammt.


4

Einige bequemer

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

Dadurch funktioniert "1 200 200" ebenfalls ordnungsgemäß


8
Noch besser ist '1,1200.00'.gsub(/[^0-9\.]/,'').to_f.
Hauleth

7
Warten Sie, warum sollten Sie konvertieren möchten "1,1200.00"zu "1120000"? Wollen Sie nicht einfach das ,(oder, je nach Gebietsschema, das .) ersetzen ? Dies konvertiert es auch nicht in eine Ganzzahl oder ein Float, sondern nur in eine Zeichenfolge ohne Trennzeichen.
Brymck

3
@Bryan: Um eine Vermutung zu wagen, möchten Sie dies möglicherweise in einer Bankanwendung tun, wenn Sie einen vom Benutzer eingegebenen Währungsbetrag umrechnen, um nur Ganzzahlen innerhalb der Anwendung zu verarbeiten: zum Beispiel die Umrechnung von Dollar und Cent in Cent . Diese Methode vermeidet Rundungsfehler, die beim Umgang mit Gleitkommazahlen unerwartet auftreten können. Wenn dem Benutzer ein Währungsbetrag angezeigt werden muss, kann der Cent-Betrag in Dollar und Cent umgerechnet werden. (Obwohl der Fragesteller nicht danach gefragt hat.)
Teemu Leisti

2
Diese Antwort geht nicht einmal auf die Anfrage des Fragestellers ein, die Zeichenfolge in eine Ganzzahl oder ein Float umzuwandeln.
LS

2

Das Folgende ist eine andere Methode, die funktioniert, obwohl sie wie bei einigen anderen Methoden Dezimalstellen entfernt.

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


1

Wenn jemand mehr als ein Komma ausgeben möchte, bin ich ein Fan von:

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

Keine Ahnung von Leistung, aber es ist flexibler als a gsub, dh:

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

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.