js实现 数字相乘 标准四舍五入,并保留小数点

js实现 数字相乘 标准四舍五入,并保留小数点

项目中有大量的数字运算,其中乘法用的最多。今天客户那边提了这么一个问题:应该显示111.938的文本框显示了111.937。其实问题定位很简单,我用的是tofixed()方法来进行四舍五入处理,后来才知道这玩意它不是四舍五入,是银行家算法(四舍六入五取偶)。网上随便拉取了一段标准的四舍五入方法也可以解决。

问题1:四舍五入

1.四舍五入方法+保留小数位数

		//四舍五入方法,保留小数方法
        //data:需要处理的数据  size:需要保留几位小数
        function fourFive(data,size) {
            let a = Math.pow(10,size)
            //最终四舍五入得出的结果
            let result =  Math.round(data * a) / a
            //保留小数位操作
            let b = result.toString().split(".")
            if(b.length>1){
                let c = b[1].toString().split("").length
                if(c == size ){
                    return result
                }else{
                    return result.toFixed(size)
                }
            }else{
                return result.toFixed(size)
            }
        }

问题2:小数相乘可以乘出来无限循环小数

1.问题展示


基础没学好,我以为它乘出来应该是个小数点后4位的小数(111.9375),结果出来是个无限循环小数

2.解决办法

//解决小数相乘出现无限循环小数方法
        function findDecimal (data1,data2) {
            //data1为计划量  data2为公式参数
            //逻辑思路。先将两个待乘的参数全部转为整数,将小数点后移。
            //考虑第一个乘数
            let data1Size = 0
            let data1New = 0
            let data1Array = data1.toString().split(".")
            if(data1Array.length != 1){
                data1Size = data1Array[1].toString().split("").length
                data1New = data1*Math.pow(10,data1Size)
            }else{
                data1New = data1
            }
            //考虑第二个乘数
            let data2Size = 0
            let data2New = 0
            let data2Array = data2.toString().split(".")
            if(data2Array.length != 1){
                data2Size = data2Array[1].toString().split("").length
                data2New = data2*Math.pow(10,data2Size)
            }else{
                data2New = data2
            }
            //开始乘法计算
            let resultOne = data1New * data2New
            let a = Math.pow(10,data1Size + data2Size)
            return resultOne/a
        }

实用

//19.9乘4.1245 保留2位小数 
$("#record2").val(fourFive(findDecimal(19.9,4.1245),2))

结果

可以给任意数字相乘
在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值