在钱包的开发中,遇到了一些钱显示的问题,比如钱的小数后太多,或者数额太大,对我们的显示造成很大的障碍.
对此我对这些钱的显示和整理做了一些处理.
- 钱数太大,保留小数点后两位,在后面拼接K,M,B,T,再大的话,基本情况不会出现,所以并无处理.
String moneyFormat(double money) {
if (money < 1000) {
return formatNum(money);
} else if (1000 <= money && money < 1000000) {
return '${formatNum((money / 1000))}K';
} else if (money > 1000000 && money < 1000000000) {
return '${formatNum((money / 1000000))}M';
} else if (money >= 1000000000 && money < 1000000000000) {
return '${formatNum(money / 1000000000)}B';
} else if (money > 1000000000000) {
return '${formatNum(money / 1000000000000)}T';
}
return formatNum(money);
}
调用: moneyFormat(100000.00);
打印显示: 100.00K
- 在使用
toStringAsFixed
的时候,发现有时候会出现一些四舍五入的情况,因此在网上找到了处理方式
//position是小数点后显示几位
String formatNum(dynamic nums, {int postion = 2}) {
var num;
if (nums is double) {
num = nums;
} else {
num = double.parse(nums.toString());
}
if ((num.toString().length - num.toString().lastIndexOf(".") - 1) < postion) {
return (num.toStringAsFixed(postion)
.substring(0, num.toString().lastIndexOf(".") + postion + 1)
.toString());
} else {
return (num.toString()
.substring(0, num.toString().lastIndexOf(".") + postion + 1)
.toString());
}
}
调用: formatNum(123.334369923, postion: 4);
打印显示: 123.3343
- 还有一种情况就是,如果是小数点后如果是0,那么我们就显示整数,如果不为0,那么就显示小数点后极为,固定下来的,比如4位,就展示4位小数,在把无效的0尾数去掉
尾数去0需要导入一个插件,正好我们项目里在计算的时候也用到了.这个插件就是用来算钱的.
decimal: ^2.3.0
//钱的显示 如果小数点后的值 大于0 返回全部 如果小数点后的值 == 0 返回整数
String moneyDoubleOrInt(double money) {
String str = '$money';
List sList = str.split('.');
if (sList.length == 2 && double.parse(sList[1]) > 0) {
//最多保留4位 并去除无效0尾数
return Decimal.parse(formatNum(str, postion: 4)).toString();
} else {
return '${int.parse(sList[0])}';
}
}
调用:
moneyDoubleOrInt(999.9400);
moneyDoubleOrInt(999.94855330);
moneyDoubleOrInt(1.00005);
打印显示:
999.94 ,
999.9485 ,
1
就这样,拿来即用即可,可能在decimal
这个插件里,我写的这些方法都有,但是自己写跟用别人的插件就是不一样,而且最近确实也没时间去研究,等有空了,在去具体看看那个插件.
如果你喜欢我的文章,那就点个关注,留个言吧!感谢大家~~! 拜拜,回见!