2012-07-13 27 views

Antwort

163

Wie wäre das?

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

Danke für Ihre 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 der Überprüfung der Antworten gibt es wahrscheinlich keine solche Methode. Wie auch immer, vielen Dank! – mCY

+0

@michealKohi können Sie mir sagen, warum löschen() ist viel schneller als das Gleiche in gsub, die Regex akzeptiert, ich habe immer gedacht, Regex Weg ist schneller. Ich habe auf beiden Benchmarks einen großen Unterschied in der Ausführungszeit gemacht. – Abhinay

+1

@Abhinay In Bezug auf Ihre Benchmarks: Stichprobengröße? Stringgröße? –

4

Einige bequemer

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

es macht "1 200 200" Arbeit richtig aswell

+8

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

+7

Warten Sie, warum sollten Sie '" 1.1200.00 "' in '" 1120000 "' konvertieren? Wollen Sie nicht einfach das ',' (oder, abhängig vom Gebietsschema, das '.') ersetzen? Dies wird auch nicht in eine Ganzzahl oder einen Gleitkommawert umgewandelt, sondern nur in eine Zeichenfolge ohne Trennzeichen. – brymck

+3

@Bryan: Um eine Vermutung zu wagen, möchten Sie dies vielleicht in einer Bankanwendung tun, wenn Sie einen Währungsbetrag konvertieren, den der Benutzer eingegeben hat, um nur ganze Zahlen innerhalb der Anwendung zu verarbeiten: zum Beispiel das Umrechnen von Dollar und Cent nach Cent. Diese Methode vermeidet Rundungsfehler, die bei Gleitkommazahlen unerwartet auftreten können. Wenn ein Währungsbetrag dem Benutzer angezeigt werden soll, kann der Centbetrag in Dollar und Cent umgerechnet werden. (Obwohl das der Fragesteller nicht gefragt wurde.) –

1

ich String#tr Sie verwenden würde:

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

Sie sollten auch sicherstellen, Stellen Sie sicher, dass Ihr Code korrekt lokalisiert ist, oder stellen Sie sicher, 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 es die Zahl etwas über eins statt tausend und so.

Entsprechende Wikipedia Artikel ist um http://en.wikipedia.org/wiki/Decimal_mark. Es scheint jedoch zu dieser Zeit schlecht geschrieben zu sein. Zum Beispiel als ein Chinese bin ich nicht sicher, woher diese Beschreibung über tausend Separator in China kommt.

1

Das folgende ist eine andere Methode, die funktionieren wird, obwohl wie bei einigen der anderen Methoden Dezimalstellen entfernt wird.

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

Wenn jemand zu sub aus mehr als einem Komma suchen bin ich ein Fan von

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

Keine Ahnung über die Leistung aber ist es flexibler als ein gsub, das heißt:

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