___ qstntxt ___

Gibt es ein gsub-Äquivalent für Ganzzahlen oder Dezimalzahlen? Sollte gsub mit ganzen Zahlen arbeiten? Im Grunde versuche ich nur dezimal in ein Ruby-Formular einzutragen und was der Benutzer Kommas verwenden darf. Zum Beispiel möchte ich, dass der Benutzer 1.000.99 eingeben kann.

Ich habe versucht,

zu verwenden %Vor%

, aber erhalten Sie den folgenden Fehler "undefinierte Methode 'gsub' für 8: Fixnum", wobei "8" durch die Nummer ersetzt wird, die der Benutzer eingibt.

    
___ tag123ruby ___ Ruby ist eine multi-plattform Open-Source, dynamische objektorientierte interpretierte Sprache, erstellt von Yukihiro Matsumoto (Matz) im Jahr 1995. Die [Ruby] -Tag ist für Fragen im Zusammenhang mit der Ruby-Sprache, einschließlich seiner Syntax und seiner Bibliotheken . Fragen speziell zum Ruby-on-Rails-Framework sollten mit [ruby-on-rails], nicht [ruby] getaggt werden. Verwenden Sie dies nicht, um Ruby in der japanischen Sprache zu markieren. ___ tag123rubyonrails3 ___ Ruby on Rails ist ein in Ruby geschriebenes Open-Source-Web-Entwicklungs-Framework. Ruby on Rails folgt dem Prinzip der Konvention über die Konfiguration und befreit Sie davon, Dinge neu erfinden zu müssen, um produktiv zu bleiben. Verwenden Sie dieses Tag nur für Rails 3-spezifische Fragen und markieren Sie diese Fragen [ruby-on-rails]. ___ answer6542082 ___

Wenn Ihr Feld ein Fixnum ist, wird es niemals Kommas haben, da Rails die Benutzereingabe in eine Zahl umwandeln muss, um sie dort zu speichern.

Dies wird jedoch dadurch erreicht, dass to_i für die Eingabezeichenfolge aufgerufen wird, was nicht gewünscht ist. überschreibt den normalen Setter zu etwas wie

%Vor%

Nicht getestet, aber etwas ähnliches sollte funktionieren ...

Sie müssen an die Kommas gehen, während die Eingabe noch eine Zeichenfolge ist.

Bearbeiten: Wie in den Kommentaren erwähnt, benötigen Sie eine andere Konvertierung als %code% , wenn Sie Dezimalzahlen akzeptieren und etwas erstellen möchten, das keine ganze Zahl ist. Außerdem haben verschiedene Länder unterschiedliche Konventionen für numerische Interpunktion, daher ist dies keine vollständige Lösung.

    
___ answer6542084 ___

probiere %code% . Das heißt, entfernen Sie alles, was keine Ziffer ist. Regexen machen keinen Unterschied zwischen Ganzzahlen, Gleitkommazahlen, Dezimalzahlen usw. Es sind alle Zeichenketten. Und Rails wird es nicht korrekt für Sie konvertieren, weil es nur %code% oder %code% darauf aufruft.

BEARBEITEN:

eigentlich: %code% : alles, was keine Ziffer oder Dezimalpunkt ist, und wandle es in einen Float um.

    
___ tag123rubyonrails ___ Ruby on Rails ist ein Open-Source-Full-Stack-Webanwendungs-Framework, das in Ruby geschrieben ist. Es folgt dem populären MVC-Framework-Modell und ist bekannt für seinen "convention over configuration" -Ansatz für die Anwendungsentwicklung. ___

8

Gibt es ein gsub-Äquivalent für Ganzzahlen oder Dezimalzahlen? Sollte gsub mit ganzen Zahlen arbeiten? Im Grunde versuche ich nur dezimal in ein Ruby-Formular einzutragen und was der Benutzer Kommas verwenden darf. Zum Beispiel möchte ich, dass der Benutzer 1.000.99 eingeben kann.

Ich habe versucht,

zu verwenden %Vor%

, aber erhalten Sie den folgenden Fehler "undefinierte Methode 'gsub' für 8: Fixnum", wobei "8" durch die Nummer ersetzt wird, die der Benutzer eingibt.

    
Oakland510 30.06.2011, 22:36
quelle

2 Antworten

14

Wenn Ihr Feld ein Fixnum ist, wird es niemals Kommas haben, da Rails die Benutzereingabe in eine Zahl umwandeln muss, um sie dort zu speichern.

Dies wird jedoch dadurch erreicht, dass to_i für die Eingabezeichenfolge aufgerufen wird, was nicht gewünscht ist. überschreibt den normalen Setter zu etwas wie

%Vor%

Nicht getestet, aber etwas ähnliches sollte funktionieren ...

Sie müssen an die Kommas gehen, während die Eingabe noch eine Zeichenfolge ist.

Bearbeiten: Wie in den Kommentaren erwähnt, benötigen Sie eine andere Konvertierung als String.to_i , wenn Sie Dezimalzahlen akzeptieren und etwas erstellen möchten, das keine ganze Zahl ist. Außerdem haben verschiedene Länder unterschiedliche Konventionen für numerische Interpunktion, daher ist dies keine vollständige Lösung.

    
Don Roby 30.06.2011, 23:09
quelle
3

probiere self.number.gsub(/\D/, '') . Das heißt, entfernen Sie alles, was keine Ziffer ist. Regexen machen keinen Unterschied zwischen Ganzzahlen, Gleitkommazahlen, Dezimalzahlen usw. Es sind alle Zeichenketten. Und Rails wird es nicht korrekt für Sie konvertieren, weil es nur #to_i oder #to_f darauf aufruft.

BEARBEITEN:

eigentlich: self.number.gsub(/[^\d\.]/, '').to_f : alles, was keine Ziffer oder Dezimalpunkt ist, und wandle es in einen Float um.

    
Ian 30.06.2011 23:09
quelle