Heim >Web-Frontend >js-Tutorial >Lösung für das Problem des Präzisionsverlusts in js Additions-, Subtraktions-, Multiplikations- und Divisionskenntnissen

Lösung für das Problem des Präzisionsverlusts in js Additions-, Subtraktions-, Multiplikations- und Divisionskenntnissen

WBOY
WBOYOriginal
2016-05-16 16:48:101418Durchsuche

Wenn Sie in JavaScript Dezimalzahlen für Addition, Subtraktion, Multiplikation und Division verwenden, werden Sie feststellen, dass auf die Ergebnisse manchmal eine lange Dezimalzahl folgt, was die Operation verkompliziert und sich auf die Berechnungsergebnisse auswirkt. Ich habe online nach den Gründen gesucht und Folgendes gefunden: In JavaScript gibt es bei der Berechnung von Daten mit Dezimalzahlen immer viele Dezimalstellen. Dies liegt daran, dass die Berechnung von Gleitkommazahlen in JavaScript auf binären Berechnungen basiert.

Code kopieren Der Code lautet wie folgt:

/**
* Additionsoperation, um mehrere Ziffern und einen Verlust der Berechnungsgenauigkeit zu vermeiden, nachdem der Dezimalpunkt zu den Daten hinzugefügt wurde.
*
* @param num1 addend 1 |*/
function numAdd(num1, num2) {
var baseNum, baseNum1, baseNum2;
try {
baseNum1 = num1.toString().split(".")[1].length; >} Catch (e) {
baseNum1 = 0;
}
try {
baseNum2 = num2.toString().split(".")[1].length Catch (e) {
baseNum2 = 0;
}
baseNum = Math.pow(10, Math.max(baseNum1, baseNum2)); baseNum;
};
/**
* Additionsoperation zur Vermeidung mehrerer Ziffern und des Verlusts der Berechnungsgenauigkeit nach dem Hinzufügen von Dezimalstellen von Daten.
*
* @param num1 minuend |*/
function numSub(num1, num2) {
var baseNum, baseNum1, baseNum2;
var precision;// precision
try {
baseNum1 = num1.toString().split(".")[1].length;
} Catch (e) {
baseNum1 = 0; {
baseNum2 = num2.toString(".")[1].length;
} Catch (e) {
baseNum2 = 0;
}
baseNum = Math .pow( 10, Math.max(baseNum1, baseNum2));
precision = (baseNum1 >= baseNum2) ? baseNum1 : baseNum2;
return ((num1 * baseNum - num2 * baseNum)). toFixed(precision );
};
/**
* Multiplikationsoperation zur Vermeidung mehrerer Ziffern und Verlust der Berechnungsgenauigkeit nach der Multiplikation von Daten mit Dezimalpunkt.
*
* @param num1 Multiplikator |*/
function numMulti(num1, num2) {
var baseNum = 0;
try {
baseNum = num1.toString ().split(".")[1].length;
} Catch (e) {
}
try {
baseNum = num2.toString().split(" .") [1].length;
} Catch (e) {
}
return Number(num1.toString().replace(".", "")) * Number(num2.toString (). replace(".", "")) / Math.pow(10, baseNum>}
/**
* Divisionsoperation zur Vermeidung mehrerer Ziffern und Verlust der Berechnungsgenauigkeit nach der Division der Daten durch Dezimalpunkt.
*
* @param num1 Dividende |*/
function num1, num2) {
var baseNum1 = 0, baseNum2 = 0;
var baseNum3, baseNum4;
try {
baseNum1 = num1.toString().split(".")[1].length; >} Catch (e) {
baseNum1 = 0;
}
try {
baseNum2 = num2.toString().split(".")[1].length Catch (e) {
baseNum2 = 0;
}
with (Math) {
baseNum3 = Number(num1.toString().replace(".", "")); >baseNum4 = Number(num2.toString().replace(".", ""));

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn