2016-07-29 13 views
1

Wahrscheinlich ist diese Frage schon irgendwo existiert aber kann mein spezifisches Problem nicht finden.Python/Javascript Nummer Präzision

Ich habe zwei Nummern, die ich hinzufügen möchte und ich möchte nicht round() Funktion verwenden, da ich mit Geld arbeite.

1.70 + 1.44 = 3.14 //Returns 3.1399999999999997 
1.70 + 1.45 = 3.15 //Returns the correct answer 
1.70 + 1.37 = 3.07 //Returns 3.0700000000000003 

Ich habe es in Javascript versucht, aber immer noch das gleiche Problem.

+0

Einfache Lösung: Führen Sie Ihre Berechnungen in ganzzahlig aus, indem Sie beispielsweise in Dollar in Cent umrechnen. – Sirko

+1

[Diese] (http://floating-point-gui.de/) Seite könnte erklären, warum das Problem auftritt und wie es gelöst werden kann. – Aurora0001

Antwort

1

Da Sie mit dem Geld arbeiten, immer die in Python decimal.Decimal Klasse.

+0

Ja. Ich habe es so gemacht, anstatt es im Frontend zu berechnen. – aldesabido

0

Verwenden parseFloat Präzision:

parseFloat(number).toFixed(precision); 

Z.B.

parseFloat(1.70 + 1.37).toFixed(2); // RETURN 3.07 
0

Eine Möglichkeit, die Sie erreichen können, besteht darin, die Werte mit (10 * Genauigkeit) zu multiplizieren, die Sie benötigen, und das Ergebnis dann durch (10 * Genauigkeit) zu teilen.

  • ((1,70 * 100) + (1,37 * 100))/100 = 3,07
  • ((1,70 * 100) + (1,45 * 100))/100 = 3,15
  • ((1,70 * 100) + (1.44 * 100))/100 = 3.14

Sie können eine Methode hinzufügen, um dies für Sie zu tun, um es einfach zu halten.