Gibt es eine ordentliche Methode, um "1,112" in Ganzzahl 1112 anstatt 1 zu konvertieren?Zeichenkette mit Komma in ganze Zahl umwandeln
Ich habe ein bekam, aber nicht ordentlich:
"1,112".split(',').join.to_i #=> 1112
Gibt es eine ordentliche Methode, um "1,112" in Ganzzahl 1112 anstatt 1 zu konvertieren?Zeichenkette mit Komma in ganze Zahl umwandeln
Ich habe ein bekam, aber nicht ordentlich:
"1,112".split(',').join.to_i #=> 1112
Wie wäre das?
"1,112".delete(',').to_i
Einige bequemer
"1,1200.00".gsub(/[^0-9]/,'')
es macht "1 200 200" Arbeit richtig aswell
Noch besser ist '' 1,1200.00'.gsub (/ [^ 0-9 \.] /, ''). To_f'. – Hauleth
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
@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.) –
ich String#tr
Sie verwenden würde:
"1,112".tr(',','').to_i # => 1112
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.
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
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
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
@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
@Abhinay In Bezug auf Ihre Benchmarks: Stichprobengröße? Stringgröße? –