将金额转换成千分制加万亿单位

import { Pipe , PipeTransform } from ' @angular/core ';

/** 可封装多个pipe
* title:金额格式转换规则三算法
* author:liuyub
* date:2018/04/24
* 规则:1、万以内金额保留两位小数且用千分符;2、万及亿以上的用万元/亿元单位,保留一位小数且用千分符;
* s-金额 n-小数点位数 (后台返回值的单位默认为分,不做变量修改,后期可维护)
* 默认返回值单位为分,
*/
@ Pipe( {name : ' formatMoneyInit ' })
export class CommonFilterPipe implements PipeTransform {
transform ( s : any , init : string ): string {
s = s * 1 ;
let n = 2 ,
unit = ' ' ;
if ( ! s || s <= 0) {
return ' 0元 '
}
switch ( true) {
case s < 1000000 :
s = ( parseInt( s) / 100) . toFixed( 2) ; //将分转化为带两位小数的元
n = 2 ;
unit = ' ' ;
break ;
case s >= 1000000 && s < 10000000000 :
s = ( parseInt( s) / 1000000) . toFixed( 2) ; //将分转化为带两位小数的万元
n = 1 ;
unit = ' 万元 ' ;
break ;
case s >= 10000000000 :
s = ( parseInt( s) / 10000000000) . toFixed( 2) ; //将分转化为带两位小数的亿元
n = 1 ;
unit = ' 亿元 ' ;
break ;
default :
return ' --.-- '
}
n = n > 0 && ( n <= 20 ? n : 0) ;
s = parseFloat(( s + '')
. replace( /[^ \d \. - ]/ g , ''))
. toFixed( n) + '' ;
let l = s . split( ' . ')[ 0] . split( '') . reverse() ; //大于元部分的分割反转
let r = s . split( ' . ')[ 1] ; //角分部分
let t = '' ;
for ( let i = 0 , p = l . length ; i < p ; i ++) {
t += l[ i] + (( i + 1) % 3 === 0 && ( i + 1) !== l . length ? ' , ' : '') ;
}
if ( r) {
return t . split( '') . reverse() . join( '') + ' . ' + r + unit ;
} else {
return t . split( '') . reverse() . join( '') + unit ;
}
}
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值