使用js,对数值保留小数点后两位的处理(两种情况)

使用js,对数值保留小数点后两位的处理(两种情况)Html部分:<divclass=”textprimary-text”><span>合计:</span><spanclass=”money”>¥{{totalMoney|numFilter}}</span></div>Js部分:(注意toFixed方法只能用于数值型数据)//情况一:保留…

大家好,又见面了,我是你们的朋友全栈君。

Html部分:

<div class="text primary-text">
  <span>合计:</span>
  <span class="money">{
  
  {totalMoney | numFilter}}</span>
</div>

Js部分:(注意toFixed方法只能用于数值型数据)

//  情况一:保留小数点后两位的过滤器,尾数四舍五入

filters: {
  numFilter (value) {
    let realVal = ''
    if (!isNaN(value) && value!== '') {
      // 截取当前数据到小数点后两位
      realVal = parseFloat(value).toFixed(2)
    } else {
      realVal = '-'
    }
    return realVal
  }
}

//  情况二:保留小数点后两位的过滤器,尾数不四舍五入(此处存在一个问题,当源数据小数点第三位为数字9,并且第四位会导致第三位进位的情况下,得到的最终数据仍然不是截取 eg: 3.1798 截取两位会变成3.18)

filters: {
  numFilter (value) {
    let realVal = ''
    if (!isNaN(value) && value!== '') {
      // 截取当前数据到小数点后三位
      let tempVal = parseFloat(value).toFixed(3)
      realVal = tempVal.substring(0, tempVal.length - 1)
    } else {
      realVal = '-'
    }
    return realVal
  }
}

  //  情况二:优化成如下方式,自行封装成一个公共函数,即用即调 

filters: {
  numFilter (value) {
    return cutOutNum(value) 
  }
}

-----  将此函数封装在外部js中  -----
 
/**
 * 对源数据截取decimals位小数,不进行四舍五入
 * @param {*} num 源数据
 * @param {*} decimals 保留的小数位数
 */
export const cutOutNum = (num, decimals = 2) => {
  if (isNaN(num) || (!num && num !== 0)) {
    return '-'
  }

  function toNonExponential (_num) {
    var m = Number(_num).toExponential().match(/\d(?:\.(\d*))?e([+-]\d+)/)
    return Number(_num).toFixed(Math.max(0, (m[1] || '').length - m[2]))
  }

  // 为了兼容科学计数法的数字
  num = toNonExponential(num)
  // 获取小数点的位置 + 1(不存在小数点的indexOf值为-1)
  const pointIndex = String(num).indexOf('.') + 1
  // 获取小数点后的个数(需要保证有小数位)
  const pointCount = pointIndex ? String(num).length - pointIndex : 0

  // 补零函数
  function zeroFill (zeroNum, num) {
    for (let index = 0; index < zeroNum; index++) {
      num = `${num}0`
    }
    return num
  }

  // 源数据为"整数"或者小数点后面小于decimals位的作补零处理
  if (pointIndex === 0 || pointCount <= decimals) {
    let tempNumA = num
    // 区分"整数"和"小数"的补零
    if (pointIndex === 0) {
      tempNumA = `${tempNumA}.`
      tempNumA = zeroFill(decimals - pointCount, tempNumA)
    } else {
      tempNumA = zeroFill(decimals - pointCount, tempNumA)
    }
    return String(tempNumA)
  }

  // 截取当前数据到小数点后decimals位
  const Int = String(num).split('.')[0]
  const Decimal = String(num).split('.')[1].substring(0, decimals)
  const tempNumB = `${Int}.${Decimal}`

  // 需求:数据为0时,需要显示为0,而不是0.00...
  return Number(tempNumB) === 0 ? 0 : tempNumB
}

                                                

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/143256.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • densenet网络结构详解_网络dea模型

    densenet网络结构详解_网络dea模型网络基本结构 我们放大一下DenseBlockDenseBlock 上图中每一次的输入都是经过Channel-wiseconcatenation后的,如k0+k,k为growthrate。denseblock一个核心的点就是:每一层的输入来自前面所有层的输出。如下,H2的输入=最开始的输入 + H1的输出= k0+kH3的输入=最开始的输入 …

    2022年9月1日
    5
  • 实战篇-OpenSSL之AES加密算法-CFB1模式

    本文属于《OpenSSL加密算法库使用系列教程》之一,欢迎查看其它文章。实战篇-OpenSSL之AES加密算法-CFB1模式一、AES简介二、CFB1模式1、命令行操作2、函数说明3、编程实现(1)特别注意(2)实现CFB1模式加解密(3)测试代码一、AES简介密码学中的高级加密标准(AdvancedEncryptionStandard,AES),又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准。这个标准用来替代原先的DES,已经被多方分析且广为全世界所使用。经过五年的甄选流程

    2022年4月9日
    125
  • 电阻参数_关于电阻的相关参数

    实际应用时,通常采用平均电阻温度系数,定义式:TCR(平均)=(R2-R1)/R1(T2-T1)有负温度系数、正温度系数及在某一特定温度下电阻只会发生突变的临界温度系数。紫铜的电阻温度系数为1/234.5℃。不同类型电阻温度稳定性从优到次,依次为:金属箔、线绕、金属膜、金属氧化膜、碳膜、有机实芯。1。镀金并不是为了减小电阻,而是因为金的化学性质非常稳定,不容易氧化,接头上镀金是为了防止接触不良(不…

    2022年4月8日
    50
  • Python基础之lambda表达式

    Python基础之lambda表达式目录1、lambda函数介绍2、lambda函数与def函数的区别3、lambda案例4、map方法混搭有时在使用函数时不需要给函数分配一个名称,该函数就是“匿名函数”。在python中使用lambda表达式表示匿名函数语法:lambda参数列表:lambda体lambda是关键字声明,在lambda表达式中,参数列表与函数中的参数列表一样,但不需要用小括号括起来,冒号后面是lambda体,lambda表达式的主要代码在lambda体处编写,类似于函数体。提示:lambda体不能是一个代码块,不能包含多条

    2022年10月17日
    3
  • hashmap面试题简书_三年php面试题

    hashmap面试题简书_三年php面试题这篇文章仅限小编个人的理解,小编不是Java方向的,只是对Java有很高的学习兴趣如果有什么不对的地方还望大佬指点HashMap的底层是数组+链表,(很多人应该都知道了)JDK1.7的是数组+链表(1.7只是一个例子,以前的话也是这样后面就以1.7为例子了)首先是一个数组,然后数组的类型是链表元素是头插法JDK1.8的是数组+链表或者数组+红黑树首先是一个数组,然后数组的类型是链表在链表的元素大于8的时候,会变成红黑树在红黑树的元素小于6的时候会变成链表元素进行尾插HaspM.

    2022年8月10日
    6
  • python算法(2)兔子产子(斐波那切数列)「建议收藏」

    python算法(2)兔子产子(斐波那切数列)「建议收藏」兔子产子1.问题描述有一对兔子,从出生后的第3个月起每个月都生一对兔子。小兔子长到第3个月后每个月又生一对兔子,假设所有的兔子都不死,问30个月内每个月的兔子总对数为多少?2.问题分析兔子产子

    2022年7月30日
    1

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号