js字符串转数字与小数保留的那点事儿

最近在总结工作中使用频率较高的方法,由于项目中经常会涉及到流量、money等等数字,就想着出一个规范的方法来统一展示在前端页面上的数字以适应产品提出的各种需求。好家伙,这写起来可是发现了巨渊深坑。

/**
 * 完成Boolean、Null、String转换为Number类型,并支持以向上取整、向下取整、四舍五入的方式保留指定数位
 * @param {Boolean || Null || String || Number} val 转换目标
 * @param {Number} precision 精确数位,默认保留两位小数,根据项目经验暂定最多支持9位小数
 * @param {String} type 转换方式,默认round四舍五入,同时支持ceil向上取整、floor向下取整
 * @return 返回转换后的数字所对应的字符串
 */
const toNumber = (val, precision=2, type='round') => {
  // 待填充
}
复制代码

我的心路历程:

  1. 过滤掉不能转化成有效数字的数据类型。
    最霸道的方式莫过于Number()大法,然而却惊喜的发现Number([])竟然输出0!!!
    那么6种原始类型 + Object作为Number的参数究竟都会输出些什么呢?(以下结果均在Chrome v73.0.3683.86 64位正式版本运行)
  • Boolean
  • Null
  • Undefined
  • Number 毕竟是一家,就不验证了
  • String
  • Symbol(“那么问题来了”系列之一:Symbol到底是个什么玩意)
  • Object
    array
    function
    date
    math
    RegExp
    ……
    ……
    ……
    (“那么问题来了”系列之二:Number到底是如何处理的)
    由上所示我们可以发现,虽然数组啊、日期啊在作为Number()的参数的时候可能会返回数字,但从产品的角度上来说这简直太……了吧。所以大胆的将这种情况刨除在外,只支持Boole
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值