在做公司flutter商城的时候遇到的问题,因为需求是后端要保留两位小数,后面的数额直接去掉,然后最开始用到的是toStringAsFixed(2)这个方法,刚开始没注意,后来申请订单的时候价格对不上,所以用到了这种方法:
例:
var a = 99;
var b = 99.9;
var c = 99.99;
var d = 99.999;
formatNum(dynamic nums, int postion) {
var num;
if (nums is double) {
num = nums;
} else {
num = double.parse(nums.toString());
}
if ((num.toString().length -
num.toString().lastIndexOf(".") -
1) <
postion) {
print(num.toStringAsFixed(postion)
.substring(0,
num.toString().lastIndexOf(".") + postion + 1)
.toString());
} else {
print(num.toString()
.substring(0,
num.toString().lastIndexOf(".") + postion + 1)
.toString());
}
}
formatNum(a, 2);
formatNum(b, 2);
formatNum(c, 2);
formatNum(d, 2);
打印结果如下:
因为toStringAsFixed()这个方法会在保留小数的基础上对末位进行四舍五入,所以在当存在99.999这种数字时,用这个就会出现问题。所以我们需要进行判断,当给的数字小数位少于我们需要截取的位数时,我们才需要用toStringAsFixed这个方法去补充后面的位数,别的情况直接截取就好了。