Плавающие ошибки возникают, когда операция умножения десятичного умножения в JS. Вы можете проверить его для получения подробной информации:
<Скрипт>
Предупреждение (11*22,9)
</script>
Результат был 251.8999999999998 вместо 251,9
Там должно быть много головных болей людей. Так как это решить? Здесь решение дано.
1,
Код кода копирования следующим образом:
<Скрипт>
Предупреждение (11*(22,9*10)/10);
</script>
Приблизительная идея решения проблемы состоит в том, что фактор сначала увеличивается в целое число и, наконец, разделено на соответствующие множественные, так что можно получить правильный результат.
2,
Код кода копирования следующим образом:
<Скрипт отложений>
Number.prototype.raate = function () {
var os.toString ();
if (ostr.indexof (".") ==-1)
Возврат 1;
еще
Return math.pow (10, parseint (osr.length-organ.indexof (".");
}
функция trans () {
args = trans.arguments;
var test = 1;
для (i = 0; i <args.length; i ++)
temp*= args [i]*args [i] .rate ();
для (i = 0; i <args.length; i ++)
temp/= args [i] .rate ();
Вернуть температуру
}
Предупреждение (транс (11,22,9));
</script>
Это решение является более хлопотным методом, но оно может заставить вас, вероятно, понять фактический процесс решения этой проблемы.
Вы также можете использовать метод четырех домов и пять входящих методов. Полем
Код кода копирования следующим образом:
Функция fordight (dight, как) {
Dight = math.round (dight*math.pow (10, как))/math.pow (10, как);
Вернуть достоинство;
}
// За исключением метода, чтобы получить точный метод удаления метода
// Описание: Результаты JavaScript будут иметь ошибку, и это будет очевидно, когда два плавучих точечных числа будут удалены. Эта функция возвращает более точный результат удаления.
// звонок: accdiv (arg1, arg2)
// возвращаемое значение: arg1 За исключением точных результатов Arg2
Функция accdiv (arg1, arg2) {{
var t1 = 0, t2 = 0, r1, r2;
try {t1 = arg1.toString ().
try {t2 = arg2.toString ().
с (математикой) {
R1 = number (arg1.tostring (). Replication (".", ""))
r2 = number (arg2.toString (). replication (".", ""))
Return (r1/r2)*pow (10, t2-t1);
}
}
// Добавить метод div к типу номера, который удобнее для вызова.
Number.prototype.div = function (arg) {
Вернуть accdiv (это, arg);
}
// функция умножения для получения точных результатов умножения
// Описание: Результаты результатов умножения JavaScript будут иметь ошибку, и это будет очевидно, когда два плавучих числа будут умножены. Эта функция возвращает более точный результат умножения.
// звонок: accmul (arg1, arg2)
// возвращаемое значение: arg1 умножается на точные результаты Arg2
Функция 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) {}
Возврат номер (s1.replace (".", "")*Номер (s2.replace (".", "") /Math.pow (10, m)
}
// Добавить метод MUL к типу номера, который удобнее для вызова.
Number.prototype.mul = function (arg) {
Вернуть accmul (arg, это);
}
// добавить метод для получения точных дополнительных результатов
// Описание: Результаты JavaScript будут иметь ошибку, и это будет более очевидно, когда будут добавлены два плавучих точечных числа. Эта функция возвращает более точный результат дополнения.
// звонок: accidd (arg1, arg2)
// возвращаемое значение: arg1 плюс точные результаты Arg2
Function acadd (arg1, arg2) {{
var r1, r2, m;
try {r1 = arg1.toString ().
try {r2 = arg2.toString ().
m = math.pow (10, math.max (r1, r2)))))))
Return (arg1*m+arg2*m)/m
}
// Добавить метод добавления в тип номера, который удобнее для вызова.
Number.prototype.add = function (arg) {
Вернуть Acadd (arg, это);
}