ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Vue中使用js实现保留小数的奇入偶不入,四舍六入的计算

2020-12-08 17:59:00  阅读:480  来源: 互联网

标签:六入 Vue return 偶不入 Number number let indexFixed fixed


Vue中使用js实现保留小数的奇入偶不入,四舍六入的计算

使用js实现保留小数的奇入偶不入,四舍六入的计算

handleDataUtils.js

/** 处理数值数据:四舍六入奇进偶不进
 * 1,如果取小数的最后一位为5,5前为奇数进位,为偶不进,五后非零就进一,五后皆零看奇偶,五前为偶应舍去,五前为奇要进一
 * 2.5后不为0时就入,为0时看5前,奇进偶不进
 * 3.四舍,六入
 * 传入数值和保留位数*/
export function handleNumber(number, fixed = 0) {
  number = String(number);
  //可以考虑清掉末尾的0,暂时限制了不会有,因为传入数值,末尾0是去掉的
  let index = number.indexOf(".");
  if (index == -1) {
    //没有小数,直接返回
    return number;
  }
  //取到保留小数位的下一位,5.5555取保留俩位,那就是小数点后第三位
  let indexFixed = index + fixed +1;
  if (indexFixed >= number.length) {
    //如果小数位数不够直接返回
    return number;
  }
  //取保留位数的后一位做判断,以下是有5的判断
  let endNumber = number.substr(indexFixed,1);
  if (endNumber != "5") {
    //如果做判断的数不是五,就按正常的四舍五入,即忽略了5,后面补0的那些由于是数字传进来,0已经去掉,此处不做处理
    return Number(number).toFixed(fixed);
  }
  if (indexFixed != number.length-1) {
    //由于当前判断位不是最后一位,而又去除了0,那么后面后的位数应该直接入位,五后不为0时入,由于会有小于五的,四舍五入肯定不行,那么只能截取到当前保留位数,然后转成数字加上10的负fixed的次方即可
    number = number.substring(0, indexFixed)
    return (Number(number) + Number(Math.pow(10,-fixed))).toFixed(fixed);
    //return this.accAdd(number,Math.pow(10,-fixed))
  }
  //接下来就时五后没有值也就是0的需要看前面的奇入偶不入了,取当前位的上一位
  let twoNumber = number.substr(indexFixed-1,1);
  if ("13579".indexOf(twoNumber) != -1) {//奇进
    number = number.substring(0, indexFixed)
    return (Number(number) + Math.pow(10,-fixed)).toFixed(fixed);
  }
  //偶不进,将取值的当前位数,直接截取字符即可
  return number.substr(0,indexFixed);
}

注意:传入的参数一定是数值,否则字符串可能造成是末尾有0,此处传入数值小数位末尾0会抹去
注意:俩数直接相加丢失了精度,此处因为丢失的精度后数值度为9,所以直接取保留位数即可。俩数相减也会丢失精度,数值度为0所以用.toFixed也一样可以
注意:number.substr(第几位开始,取几位);,从零开始算
注意:number.substring(从第几位, 到第几位);,从零开始算
注意:Number(number).toFixed(保留的小数位数);这个方法应该是四舍六入不包含五。

如何使用

导入

import { handleNumber } from '@/utils/handleDataUtils';

使用

methods: {
      /** 计算*/
      count() {
        setTimeout(()=>{
          this.count_1();
        },10)
      },
      /**计算*/
      count_1() {
        //(L1-L)/L0 * 100
        let l0 = this.form.getFieldValue('datumLength');
        let l_1 = this.form.getFieldValue('result1');
        let l1_1 = this.form.getFieldValue('result4');
        if ((Number(l0) != 0) &&this.isValuable(l0) && this.isValuable(l_1) && this.isValuable(l1_1)) {
          this.form.setFieldsValue({
            "result5": handleNumber(Number((Number(l1_1) - Number(l_1)) / Number(l0) * 100), 3)
          })
        }
      },
}

标签:六入,Vue,return,偶不入,Number,number,let,indexFixed,fixed
来源: https://blog.csdn.net/qq_44750520/article/details/110870596

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有