浮点数的加减乘除

最近在做选股时,遇到了关于浮点数的运算问题,是将2个只有2位小数的数字进行相加运算之后,也只保留2位小数,但在使用toFixed(2),Math.floor(15.7784514000 * 100) / 100 等方法后还是不能将他转为只有2位小数的

当我输入32.32+88.88 得到的是 121.19999...  而不是121.2,这是浮点数运算的结果,然后再用toFixed(2)保留2位小数还是不行

1.当相加的两个小数已经是保留2位小数的数,相加之后的数是由浮点数运算而成的,直接用toFixed()方法保留2位小数时就不管用了

解决办法:将运算后的结果转为字符串,截取小数点后2位数,但是这样得到的结果不精确,因为这里是进行相加运算,所以得到的数肯定是保留2位小数的,所以我是将相加的两个数转为整数(乘以100),进行相加运算之后再将得到的数除以100,就得到了2位小数的数;

如果是其他运算得到的小数可以用转为字符串的方法保留3位小数,再四舍五入转为2位

2.如果相加的2个数就是多位小数的,可以在输入时使用正则限制只能保留2位小数,或者转为字符串限制保留2位小数

1).使用字符串保留2位小数的方法:
function deal(num){
    var num = num+ "";
    var num1 = num*substring(0,num.indexOf(".")+3)
    num = num1*1
    return num
}

num.indexOf(".") 就是获取小数点的index(索引),然后用substring()方法截取小数点索引后2位

2).第二种是使用正则
Number(15.7784514000.toString().match(/^\d+(?:\.\d{0,2})?/))
其他保留2位小数的方法:
//功能:将浮点数四舍五入,取小数点后2位 
 function toDecimal(x) { 
  var f = parseFloat(x); 
  if (isNaN(f)) { 
  return; 
  } 
  f = Math.round(x*100)/100; 
  return f; 
 }
//制保留2位小数,如:2,会在2后面补上00.即2.00 
 function toDecimal2(x) { 
  var f = parseFloat(x); 
  if (isNaN(f)) { 
  return false; 
  } 
  var f = Math.round(x*100)/100; 
  var s = f.toString(); 
  var rs = s.indexOf('.'); 
  if (rs < 0) { 
  rs = s.length; 
  s += '.'; 
  } 
  while (s.length <= rs + 2) { 
  s += '0'; 
  } 
  return s; 
 }

其他方法:

//四舍五入

 alert("保留2位小数:" + fomatFloat(3.14559267, 2));

 alert("保留1位小数:" + fomatFloat(3.15159267, 1));
//五舍六入
 alert("保留2位小数:" + 1000.003.toFixed(2));
 alert("保留1位小数:" + 1000.08.toFixed(1));
 alert("保留1位小数:" + 1000.04.toFixed(1));
 alert("保留1位小数:" + 1000.05.toFixed(1));
//科学计数
 alert(3.1465.toExponential(2)); //3.15e+0
 alert(3.1665.toExponential(1)); // 3.2e+0
//精确到n位,不含n位
 alert("精确到小数点第2位" + 3.1415.toPrecision(2)); //3.1
 alert("精确到小数点第3位" + 3.1465.toPrecision(3)); //3.15
 
其他处理数据的方法:

1.丢弃小数部分,保留整数部分

parseInt(5/2)

2.向上取整,有小数就整数部分加1

Math.ceil(5/2)

3,四舍五入.

Math.round(5/2)

4,向下取整

Math.floor(5/2)

另类的方法

<script type="text/javascript">
onload = function(){
    var a = "23.456322";
    var aNew;
    var re = /([0-9]+.[0-9]{2})[0-9]*/;
    aNew = a.replace(re,"$1");
    alert(aNew);
}
</script>

<script>
var num=22.127456;
alert( Math.round(num*100)/100);
</script>

js强制保留2位,不足两位补零
function changeTwoDecimal_f(x) {
    var f_x = parseFloat(x);
    if (isNaN(f_x)) {
        alert('function:changeTwoDecimal->parameter error');
        return false;
    }
    var f_x = Math.round(x * 100) / 100;
    var s_x = f_x.toString();
    var pos_decimal = s_x.indexOf('.');
    if (pos_decimal < 0) {
        pos_decimal = s_x.length;
        s_x += '.';
    }
    while (s_x.length <= pos_decimal + 2) {
        s_x += '0';
    }
    return s_x;
}

浮点数转为整数的方法:

parseInt() , Math.floor与Math.ceil  

https://www.jb51.net/article/45884.htm

 

 

posted @ 2020-12-06 22:00  程序员瑶琴  阅读(520)  评论(0)    收藏  举报