分类目录: html5
js精度计算
Post date:
Author: cyy
Number of comments: no comments
js直接进行计算时,有时候会出现计算不准确的情况,例如
4.031 * 1000 = 4030.9999999999995
加减乘除方法:
function add(...val) {
let max = 0;
let count = 0;
for (let i = 0; i < val.length; i++) {
const strVal = val[i].toString();
const index = strVal.indexOf(".");
let num = 0;
if (index > -1) {
num = strVal.length - 1 - index;
max = num > max ? num : max;
}
}
for (let i = 0; i < val.length; i++) {
count += Math.round(val[i] * Math.pow(10, max));
}
return count / Math.pow(10, max);
}
// 使用:add(0.1, 0.2, 0.3, 0.4) => 1。可以传多个参数进行相加。
function sub(...val) {
let max = 0;
let count = val[0] | 0;
for (let i = 0; i < val.length; i++) {
const strVal = val[i].toString();
const index = strVal.indexOf(".");
let num = 0;
if (index > -1) {
num = strVal.length - 1 - index;
max = num > max ? num : max;
}
}
for (let i = 0; i < val.length; i++) {
count -= Math.round(val[i] * Math.pow(10, max));
}
return count / Math.pow(10, max);
}
// sub(1, 0.2, 0.3, 0.4) => 0.1。相当于1 - 0.2 -0.3 -0.4;可以传多个参数,使用首位减后面的所有参数。
function ride(...val) {
const strVal = val[0].toString();
const strValTwo = val[1].toString();
const index = strVal.indexOf(".");
const indexTwo = strValTwo.indexOf(".");
const num = [0, 0];
if (index > -1) {
num[0] = strVal.length - 1 - index;
}
if (indexTwo > -1) {
num[1] = strValTwo.length - 1 - index;
}
return (
Math.round(
val[0] * Math.pow(10, num[0]) * (val[1] * Math.pow(10, num[1]))
) / Math.pow(10, num[0] + num[1])
);
}
// ride(0.5, 0.6) => 3, 只允许传入两个参数。%计算可以这样ride(0.5, 100) => 50。
function exc(val, valTwo = 100) {
const strVal = val.toString();
const strValTwo = valTwo.toString();
const index = strVal.indexOf(".");
const indexTwo = strValTwo.indexOf(".");
const num = [0, 0];
if (index > -1) {
num[0] = strVal.length - 1 - index;
}
if (indexTwo > -1) {
num[1] = strValTwo.length - 1 - index;
}
return (
Math.round(val * Math.pow(10, num[0])) /
(Math.round(valTwo * Math.pow(10, num[1])) * Math.pow(10, num[0] - num[1]))
);
}
// 使用:exc(0.5, 0.2) => 2.5, 只允许传入两个参数。如果计算出现无穷数请后期根据需要修改最后代码进行取舍。
function percentage(val) {
const strVal = val.toString();
const index = strVal.indexOf(".");
let num = 0;
if (index > -1) {
num = strVal.length - 1 - index;
}
if (num > 2) {
return Math.round(val * Math.pow(10, num)) / Math.pow(10, num - 2);
} else {
return Math.round(val * 100);
}
}
// 用于计算%数的。percentage(0.05) => 5
转载自: https://blog.csdn.net/github_38186390/article/details/84924741