实现代码:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<script>
/**
*JavaScript在处理小数的时候会存在不准确的问题;
解决的方法可以是:将小数变为整数来处理。
https://www.jb51.net/article/47803.htm
*/
/**
* https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Math/pow
Math.max(value1[,value2, ...])
参数:value1, value2, ...一组数值
返回值:返回给定的一组数字中的最大值。
如果给定的参数中至少有一个参数无法被转换成数字,则会返回 NaN。
如果没有参数,则结果为 - Infinity
Math.pow() 函数返回基数(base)的指数(exponent)次幂;
Math.pow(base, exponent) 表示base的exponent次方;
参数:base基数;exponent 指数;
如果 base 是 2 ,且 exponent 是 7,
则 Math.pow() 函数返回 128 (2 的 7 次幂)
*/
/**
* 加法
* 计算方式:1.先将所有的小数乘为整数;
2.待加减运算执行完之后再除去对应的 m 的值,将其变为小数输出;
* */
function accAdd(arg1,arg2){
var r1,r2,m;
//获取arg1,arg2的小数点后的长度;
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(r1,r2));
/**需要引入其他的方法
* return m.div(parseFloat(arg1).mul(m)+parseFloat(arg2).mul(m))
**/
return (arg1*m+arg2*m)/m;
}
/**
* 给Number类型增加一个add方法,调用起来更加方便。
*
* */
Number.prototype.add = function (arg){
return accAdd(arg,this);
}
/**
* 减法
**/
function accsub(arg1,arg2){
return accAdd(arg1,-arg2);
}
/**
* 乘法
* */
function 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)
}
/**
* 给Number类型增加一个mul方法,调用起来更加方便。
**/
Number.prototype.mul = function (arg){
return accMul(arg, this);
}
/**
* 除法
* */
function 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].length;
}catch(e){}
with(Math){
r1=Number(arg1.toString().replace(".",""))
r2=Number(arg2.toString().replace(".",""))
return (r1/r2)*pow(10,t2-t1);
}
}
/**
* 给Number类型增加一个div方法,调用起来更加 方便。
* */
Number.prototype.div = function (arg){
return accDiv(this, arg);
}
/**
* toFixed()实现方法可把 Number 四舍五入为指定小数位数的数字。
* */
Number.prototype.toFixed=function(len){
var tempNum=0;
var s;
var s1=this+"";
var start=s1.indexOf(".");
if(s1.substr(start+len+1,1)>=5){
tempNum=1
}
var temp=Math.pow(10,len);
s=Math.floor(Math.round(this*temp));
return s/temp
};
/**
* https://blog.csdn.net/luxxxx/article/details/90177682
*/
/**
* trim() 方法用于删除字符串的头尾空格
* \s匹配任何不可见字符,包括空格、制表符、换页符等等。
* 等价于[ \f\n\r\t\v]
* \f: 匹配一个换页符。等价于\x0c和\cL。
* \n: 匹配一个换行符。等价于\x0a和\cJ。
* \r: 匹配一个回车符。等价于\x0d和\cM。
* \t: 匹配一个制表符。等价于\x09和\cI。
* \v: 匹配一个垂直制表符。等价于\x0b和\cK。
* */
String.prototype.trim=function(){
return this.replace(/(^\s*)|(\s*$)/g,"")
};
//https://www.cnblogs.com/xinggood/p/6639022.html
console.log("JS加法(0.1+0.2):"+(0.1+0.2));
var sum=0.1.add(0.2);
console.log("处理过的结果:"+sum);
console.log("JS减法(0.3-0.1):"+(0.3-0.1));
console.log("处理后的结果:"+accsub(0.3,0.1));
console.log("JS乘法(8.80*12):"+(8.80*12));
console.log("处理后的结果:"+8.80.mul(12));
console.log("JS除法"+(100/2));
/**此处需要转型原因待研究**/
console.log("处理后的结果:"+parseFloat(100).div(parseFloat(2)));
//trim();
var str=" wang tao ";
console.log(str.trim());
console.log(" hello world ".trim());
//toFixed()
console.log(57.4553.toFixed(3));
</script>
</head>
<body>
</body>
</html>