1. Используйте JS для расчета
12.32 * 7 Что такое результат?
Ответ: 86.240000000000001
Почему возникает эта проблема? Как это решить?
Существует ошибка, когда JS имеет дело с умножением и делением десятичных десятиц. Решение может быть: превратить десятичное значение в целое число, чтобы справиться с ним.
Приведенный выше расчет можно изменить на:
12,32 * 100 * 7/100
Результат: 86.24, правильно.
Давайте рассчитаем снова:
8,80 * 100 * 12/100
Результат: 105,600000000000002
Подобные проблемы возникнут в 38,80.
Повысить точность в 10 раз:
8,80 * 1000 * 12/1000
Результаты: 105,6
Это нормально.
16,40 * 1000000 * 6 /1000000
Есть проблемы с результатом
Чтобы сделать выполнение JS более точным, значение может быть непосредственно расширено на 10 000 раз в последующем десятичном расчете JS, а затем разделена на 10 000 для решения проблемы.
var num = 38,80;
var num2 = 13;
предупреждение (num * 10000 * 12 /10000);
Число, умноженное и разделенное на 10000, является наиболее подходящим для тестирования. У некоторых чисел есть проблемы, когда они меньше, и у некоторых цифр возникают проблемы, когда они больше (1000 000).
два,
<script> number.prototype.rate = function () {varoStr = this.toString (); if (ostr.indexof (".") ==-1) return1; elsereturnmath.pow (10, parseint (ostr.length-ostr.indexof (".")-1);}; functiontran () {args = tran.arguments; vartemp = 1; for (i = 0; i <args.length; i ++) temp*= args [i]*args [i] .rate (); for (i = 0; i <args.length; i ++) temp/= args [i] .rate (); </script>Это решение является более громоздким решением, но оно может дать вам приблизительное понимание фактического процесса решения этой проблемы.
// Функция разделения используется для получения точных результатов деления // Примечание. В результате разделения JavaScript будут ошибки, которые будут более очевидны при разделении двух номеров с плавающей запятой. Эта функция возвращает более точный результат деления. // Вызов: accdiv (arg1, arg2) // return value: точный результат arg1, деленного на функцию arg2 accdiv (arg1, arg2) {var t1 = 0, t2 = 0, r1, r2; try {t1 = arg1.toString (). split (".") [1] .length} catch (e) {} try {t2 = arg2.toString (). Split (".") [1] .leng th} catch (e) {} с (math) {r1 = number (arg1.toString (). reply (".", ")) r2 = number (arg2.toString (). reply (". ",")) return (R1/R2)*POW (10, T2-T1);}} // Добавить метод div к типу номера, что делает его более удобным для вызова. Number.prototype.div = function (arg) {return accdiv (this, arg);} // множественная функция используется для получения точных результатов умножения // Примечание. В результатах умножения javaScript будут ошибки, что будет более очевидным при умножении двух номеров с плавающей точкой. Эта функция возвращает более точный результат умножения. // Вызов: accmul (arg1, arg2) // return value: точный результат arg1, умноженного на функцию arg2 accmul (arg1, arg2) {var m = 0, s1 = arg1.toString (), s2 = arg2.toString (); try {m+= s1.split (".") [1] .length} catch (e) {} try {m+= s2.split (".") [1] .length} catch (e) {} return Number (s1.replace (".", "))*Number (s2.replace (". ","))/Math.pow (10, m)} // Добавить метод mul в тип числа, который удобнее для вызова. Number.prototype.mul = function (arg) {return accmul (arg, this);} // Функция добавления используется для получения точных результатов добавления // Примечание. В результате добавления javaScript будут ошибки, что будет более очевидным при добавлении двух номеров с плавающей точкой. Эта функция возвращает более точный результат добавления. // Вызов: AccAdd (arg1, arg2) // return value: точный результат функции arg1 plus arg2 accadd (arg1, arg2) {var r1, r2, m; try {r1 = arg1.tostring (). split (".") [1] .length} catch (e) {r1 = 0} try {r2 = arg2.toString (). Split (".") [1] .length} catch (e) {r2 = 0} m = math.pow (10, math.max (r, r2 = 0} m = math.pow (10, math.max (arg1*m+arg2*m)/m} // Добавить метод добавления в тип номера, что делает его более удобным для вызова. Number.prototype.add = function (arg) {return accadd (arg, this);}Приведенный выше JavaScript десятичного умножения. Обработка ошибок ошибок в результате ошибок - это все, что я поделился с вами. Я надеюсь, что вы можете дать вам ссылку, и я надеюсь, что вы сможете поддержать Wulin.com больше.