2016-08-08 8 views
0

Ich benutze Dentaku gem, um kleine komplexe Ausdrücke wie Grundgehalt ist 70% des Bruttogehalts zu lösen. Da die Formeln benutzerdefinierbar sind, habe ich an dentaku gearbeitet.Wie lösen mathematische Ausdrücke in Rails 4 wie 6000 * 70%?

Wenn I calculator = Dentaku::Calculator.new schreiben zu initialisieren und dann geben Sie den Befehl calculator.evaluate("60000*70%") dann kommen Fehler wie unten:

Dentaku::ParseError: Dentaku::AST::Modulo requires numeric operands 
from /Users/sulman/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/dentaku-2.0.8/lib/dentaku/ast/arithmetic.rb:11:in `initialize' 

I habe Array ist, die die Formel wie gespeichert ist: ["EarningItem-5","*","6","7","%"] wo EarningItem-5 ist ein Objekt und hat einen Wert 60000

Wie kann ich solche Ausdrücke auflösen?

+1

Für diesen speziellen Fall können Sie verwenden 'basic_salary = Brutto_Alarm * 0,7' – user1201917

Antwort

1

Für diesen speziellen Fall, dass Sie basic_salary = gross_salary * 0.7

Weiter verwenden können, müssen Sie das Nummernfeld in Ihren Ansichten erstellen, den 0..100 Bereich akzeptiert. Schließlich, stellen Sie den after_save Rückruf und verwenden diesen Code:

Modell

after_create :percent_to_float 

protected 

def percent_to_float 
    self.percent = percent/100.0 
    self.save 
end 

edit: Natürlich können Sie einfach diese Formel ohne Rückrufe:

basic_salary = gross_salary/100.0 * 70 

wobei 70 benutzerdefinierter Wert ist.

+0

Daten kommen wie '[" EarningItem-5 "," * "," 6 "," 7 ","% "]' so Benutzer 670% sowie –

+0

eingeben können ich deine Formel ist wie Magie :) Kannst du es interpretieren? ps: Fühlen Sie sich frei, Ihren eigenen Bereich zu definieren oder einfach wegzulassen – user1201917

+0

Hat es Ihnen geholfen? Irgendeine Anregung? Es ist ziemlich frustrierend = \ – user1201917

1

Dentaku scheint "Prozent" nicht zu unterstützen. Versuchen Sie, diese stattdessen

calculator.evaluate('60000 * 0.7') 
+0

Benutzer kann 70% eingeben ... Wie löst man das ??? Oder wie kann ich 70% oder irgendeinen anderen Prozentpunkt ändern? –

+0

Wenn der Benutzer 70 gibt, können Sie das in 0,7 umwandeln, indem Sie durch 100 dividieren. 70/100.0 = 0.7 – kcdragon

+0

Daten kommen wie '[" EarningItem-5 "," * "," 6 "," 7 ","% " ] so kann der Benutzer auch 670% eingeben –

Verwandte Themen