2016-06-20 16 views
0

Was ist der beste Weg, um mit der Multiplikation und Division von Brüchen in Javascript zu arbeiten?Wie arbeiten Sie mit Brüchen in Javascript?

Ein Beispiel für einen der Fehler I erhalten, wenn 1/5 mal 1/10 multipliziert mit dem folgenden Code kann in der Konsole gesehen:

console.log((1/5) * (1/10)); 

die 0,020000000000000004 anstelle von 0,02 druckt.

Ich versuche, einige Chemie Gleichgewicht Berechnungen (Stöchiometrie) auf der Clientseite in Javascript durchzuführen. Die Mathematik erfordert einige Matrixberechnungen, einschließlich des Bestimmens des Nullraums oder Kerns von zwei Matrizen. Ich konnte eine Bibliothek namens sylvester.js für einen Teil der Matrix-Mathematik finden, konnte aber immer noch keine Javascript-Implementierung finden, um den Kernel zu finden. Im Rahmen meiner Implementierung muss ich in der Lage sein, Brüche zuverlässig zu vervielfachen.

Ich dachte über eine gewisse Genauigkeit nach, aber ich fühlte mich unwohl und begann den Code neu zu schreiben, um nur ganze Zahlen zu verwenden und alles einfach mit einer bestimmten Zahl zu multiplizieren. Dies scheint immer noch nicht der beste Weg zu sein. Was soll ich machen?

BEARBEITEN Ich sollte erwähnen, dass eine meiner Anforderungen ist, dass ich klaren, lesbaren Code habe und dass die Domain in Bezug auf Brüche gut verstanden wird. Ich möchte die Operationen, die ausgeführt werden, so schreiben, dass ich nicht nur daran arbeite, dass Fließkomma-Mathe gebrochen wird. Meine Frage ist anders als "Ist Gleitkomma-Mathematik gebrochen?" Ich frage nicht, ob es ein Problem gibt oder nicht, ich weiß, dass es ein Problem gibt, aber wie komme ich um das Problem herum und schreibe immer noch sauberen Code in Bruchteilen. Auch bei der Suche nach Brüchen in Javascript erscheint die andere Antwort nicht einmal.

+0

Dann verwenden Sie keine Floats ... und da alle Zahlen in JS Floats sind, sind Sie im Grunde SOL, es sei denn, Sie implementieren Ihre eigenen mathematischen Routinen. –

+0

Sie können die Rundung nur für die Anzeige verwenden. – meskobalazs

+0

Machen Sie einfach Division den letzten Schritt in Ihrer Berechnung. '(1/5) * (1/10)' ist das gleiche wie '1/50' und dies wird tatsächlich zu '0,02' führen. – Xufox

Antwort

-3

Es erscheint mir ziemlich natürlich, eine Bibliothek zu verwenden, die rationale Zahlen implementiert, wenn Sie mit ihnen arbeiten möchten. Fraction.js kann eine gute Wahl sein. Ich habe keine Erfahrung mit dieser speziellen Bibliothek, aber es scheint ziemlich stabil und leicht. Außerdem habe ich Brüche in C++ geschrieben, also weiß ich, dass es keinen signifikanten Overhead geben sollte.

+0

Vielen Dank für den Tipp zur Bibliothek, das könnte der Weg sein, den ich gehe, aber was ist der Grund, warum ich eine Bibliothek benutzen sollte? Hast du irgendwelche Erfahrungen mit der Bibliothek? –

+1

Nun, es scheint mir ziemlich natürlich zu sein, eine Bibliothek zu verwenden, die rationale Zahlen implementiert, wenn Sie mit ihnen arbeiten wollen. Ich habe keine Erfahrung mit dieser speziellen Bibliothek, aber es scheint ziemlich stabil und leicht. Außerdem habe ich Brüche in C++ geschrieben, also weiß ich, dass es keinen signifikanten Overhead geben sollte. – Qumeric

+0

Danke. Was denkst du darüber, was du in deiner Antwort in deine Antwort geschrieben hast? –

Verwandte Themen