calc top-level property
final
Implementation
final Map<String, Function> calc = { // 除法
'/': (num arg1, num arg2) {
num t1 = '$arg1'.split('.').length == 2 ? '$arg1'.split('.')[1].length : 0;
num t2 = '$arg2'.split('.').length == 2 ? '$arg2'.split('.')[1].length : 0;
num r1 = num.parse('$arg1'.replaceFirst('.', ''));
num r2 = num.parse('$arg2'.replaceFirst('.', ''));
return calc['*']((r1 / r2), Math.pow(10, t2 - t1));
},
'*': (num arg1, num arg2) { // 乘法
String s1 = '$arg1';
String s2 = '$arg2';
num m = s1.split('.').length == 2 ? s1.split('.')[1].length : 0;
m += s2.split('.').length == 2 ? s2.split('.')[1].length : 0;
return num.parse(s1.replaceFirst('.', '')) * num.parse(s2.replaceFirst('.', '')) / Math.pow(10, m);
},
'+': (num arg1, num arg2) { // 加法
num r1 = '$arg1'.split('.').length == 2 ? '$arg1'.split('.')[1].length : 0;
num r2 = '$arg2'.split('.').length == 2 ? '$arg2'.split('.')[1].length : 0;
num m = Math.pow(10, Math.max(r1, r2));
return (arg1 * m + arg2 * m) / m;
},
'-': (num arg1, num arg2) { // 减法
num r1 = '$arg1'.split('.').length == 2 ? '$arg1'.split('.')[1].length : 0;
num r2 = '$arg2'.split('.').length == 2 ? '$arg2'.split('.')[1].length : 0;
num m = 10 * Math.max(r1, r2);
return ((arg1 * m - arg2 * m) / m).toStringAsFixed(Math.max(r1, r2));
},
'%': (num arg1, num arg2) { // 余数
num r1 = '$arg1'.split('.').length == 2 ? '$arg1'.split('.')[1].length : 0;
num r2 = '$arg2'.split('.').length == 2 ? '$arg2'.split('.')[1].length : 0;
num m = Math.pow(10, Math.max(r1, r2));
return calc['*'](arg1, m) % calc['*'](arg2, m) / m;
},
'**': (num arg1, num arg2) { // 幂运算
num r1 = '$arg1'.split('.').length == 2 ? '$arg1'.split('.')[1].length : 0;
return Math.pow(arg1, arg2).toStringAsFixed(calc['*'](r1, arg2));
},
'atan2': Math.atan2,
'max': Math.max,
'min': Math.min,
}