Wie ist der schwebende Punkt -Typ in JS?
Zum Beispiel: var a = 0,69;
Ich möchte 6,9 direkt zum Schreiben von var c = a*10 erhalten;
Alarm (c); das Ergebnis ist: 6.89999999999995
Wenn Sie online suchen, sagten einige Internetnutzer, dass dies ein JS -schwimmender Berechnungsfehler ist und eine Lösung gefunden hat:
Methode 1: JS Benutzerdefinierte Funktion
Kopieren Sie den Code -Code wie folgt:
<Script>
// Methode hinzufügen, um genaue zusätzliche Ergebnisse zu erhalten
// Beschreibung: Die Ergebnisse von JavaScript haben einen Fehler, und es wird offensichtlicher sein, wenn die beiden schwimmenden Punktzahlen hinzugefügt werden. Diese Funktion gibt ein genaueres Ergebnis der Addition zurück.
// rufen Sie an: accidd (arg1, arg2)
// Rückgabewert: Arg1 plus die genauen Ergebnisse von Arg2
Funktion Acadd (arg1, arg2) {{{
var r1, r2, m;
Versuchen Sie {r1 = arg1.toString ().
Versuchen Sie {r2 = arg2.toString ().
m = math.pow (10, math.max (r1, r2)))
Return (arg1*m+arg2*m)/m
}
// Fügen Sie eine Methode hinzu, die zum Nummerntyp hinzugefügt wird, was bequemer zu rufen ist.
Number.prototype.add = function (arg) {
Return Acadd (arg, this);
}
// Methode hinzufügen, um genaue zusätzliche Ergebnisse zu erhalten
// Beschreibung: Die Ergebnisse von JavaScript haben einen Fehler, und es wird offensichtlicher sein, wenn die beiden schwimmenden Punktzahlen hinzugefügt werden. Diese Funktion gibt ein genaueres Ergebnis der Addition zurück.
// rufen Sie an: accidd (arg1, arg2)
// Rückgabewert: Arg1 plus die genauen Ergebnisse von Arg2
Funktion Accsub (arg1, arg2) {{{{{{{{{{{{{{{{{{{{{{{{
var r1, r2, m, n;
Versuchen Sie {r1 = arg1.toString ().
Versuchen Sie {r2 = arg2.toString ().
m = math.pow (10, math.max (r1, r2));
// Letzte Änderung durch Deeka
// Länge der dynamischen Steuergenauigkeit
n = (r1> = r2)?
Return ((arg1*m-rg2*m)/m) .Tofixed (n);
}
// außer der Methode, um die genaue Methode zum Entfernen der Methode zu erhalten
// Beschreibung: Die Ergebnisse von JavaScript haben einen Fehler, und es ist offensichtlich, wenn die beiden schwimmenden Punktzahlen entfernt werden. Diese Funktion gibt ein genaueres Entfernungsergebnis zurück.
// rufen Sie: ACCDIV (Arg1, Arg2)
// Rückgabewert: Arg1 außer den genauen Ergebnissen von Arg2
Funktion accdiv (arg1, arg2) {{{{{{{{{{{{{{{{{{{{
var t1 = 0, t2 = 0, r1, r2;
Versuchen Sie {t1 = arg1.toString ().
Versuchen Sie {t2 = arg2.toString ().
mit (math) {
R1 = nummer (arg1.tostring (). Ersetzen (".", ""))
r2 = nummer (arg2.tostring (). ersetzen (".", ""))
Return (r1/r2)*pow (10, t2-t1);
}
}
// Fügen Sie eine DIV -Methode zum Nummerntyp hinzu, die bequemer zu rufen ist.
Number.Prototype.div = function (arg) {
Return Accdiv (this, arg);
}
// Multiplikationsfunktion, um genaue Multiplikationsergebnisse zu erhalten
// Beschreibung: Die Ergebnisse der JavaScript -Multiplikationsergebnisse haben einen Fehler, und es ist offensichtlich, wenn die beiden schwimmenden Punktzahlen multipliziert werden. Diese Funktion gibt ein genaueres Multiplikationsergebnis zurück.
// rufen Sie an: Accmul (arg1, arg2)
// Rückgabewert: Arg1 wird mit den genauen Ergebnissen von Arg2 multipliziert
Funktion accmul (arg1, arg2)
{{{{
Varm M = 0, s1 = arg1.toString (), s2 = arg2.toString ();
Try {m+= s1.split (".") [1] .Length} catch (e) {}
Try {m+= s2.Split (".") [1] .Length} catch (e) {}
Rückgabenummer (S1.Replace (".", "")*Nummer (S2.Replace (".
}
// Fügen Sie eine MUL -Methode zum Nummerntyp hinzu, der bequemer zu rufen ist.
Number.Prototype.mul = function (arg) {
Return accmul (arg, this);
}
var a = 0,69;
var b = 10;
Alarm (a*b); // 6.8999999999995
Alarm ((a*100)/10);
</script>
Rufen Sie einfach die Funktion direkt auf.
Methode 2: Wenn Sie die Anzahl der Dezimalstellen kennen, können Sie die Anzahl der schwimmenden Punktzahlen an die Ganzzahl einbringen (dividieren Sie schließlich das entsprechende Mehrfach) und führen Sie dann den Betriebsvorgang durch.
Alarm (11*22,9);
Alarm (11*(22,9*10)/10);