1. pow, round 를 이용하는 방법 (math 라이브러리 필요)
2. double.parse, toStringAsFixed 를 이용하는 방법
3. intl 패키지의 NumberFormat 을 이용하는 방법
import 'dart:math' as math; | |
import 'package:flutter_test/flutter_test.dart'; | |
class TestSet { | |
final num number; | |
final int pre; | |
final double expected; | |
TestSet(this.number, this.pre, this.expected); | |
} | |
void main() { | |
final tester = [ | |
TestSet(12.3123, 2, 12.31), | |
TestSet(31.47, 1, 31.5), | |
TestSet(5927.9978, 2, 5928.0), | |
TestSet(5927.9978, 3, 5927.998), | |
TestSet(5927.8978, 2, 5927.9), | |
TestSet(12345.126, 2, 12345.13), | |
TestSet(0.12345, 4, 0.1235), | |
]; | |
group('round num 2 tester', () { | |
var start = DateTime.now(); | |
for (var element in tester) { | |
test('test $element', () { | |
num number = element.number; | |
int pre = element.pre; | |
num aa = number.rightRoundNum(pre); | |
// expect(number.rightRoundNum(pre), aa); | |
expect(element.expected, aa); | |
print("input : $number, $number.roundNum($pre) : $aa"); | |
}); | |
} | |
var diff = DateTime.now().difference(start); | |
print(diff); | |
start = DateTime.now(); | |
for (var element in tester) { | |
test('test $element', () { | |
num number = element.number; | |
int pre = element.pre; | |
num aa = number.roundNum(pre); | |
// expect(number.rightRoundNum(pre), aa); | |
expect(element.expected, aa); | |
print("input : $number, $number.roundNum($pre) : $aa"); | |
}); | |
} | |
diff = DateTime.now().difference(start); | |
print(diff); | |
}); | |
} | |
extension RoundWithPrecision on num { | |
num roundNum(int precision) { | |
final mod = math.pow(10, precision); | |
return (this * mod).round() / mod; | |
} | |
num rightRoundNum(int precision) { | |
return double.parse(toStringAsFixed(precision)); | |
} | |
/// NumberFormat 사용하는 방법 | |
// num formatRoundNum(int precision) { | |
/// intl 있어야 함 | |
// } | |
} |