Vue中使用js实现保留小数的奇入偶不入,四舍六入的计算
作者:互联网
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