mySimpleRoundTo function
Simple rounding (corresponds to Pascal MySimpleRoundTo)
Implementation
double mySimpleRoundTo(double value, int digit) {
if (digit < 0) {
// Rounding to decimal places: scale by an exact power of ten, then trim
// binary noise to 15 significant digits (1.005*100 = 100.49999…) before
// rounding half away from zero, so ROUND(1.005,2) = 1.01 and
// ROUND(6.6,1) = 6.6 exactly.
final m = pow(10.0, -digit).toDouble();
final s = double.parse((value.abs() * m).toStringAsPrecision(15));
final r = (s + 0.5).floorToDouble();
return (value < 0 ? -r : r) / m;
}
final factor = pow(10.0, digit).toDouble();
final e = pow(10.0, digit - 1).toDouble() * 5;
double f;
if (value < 0) {
f = (value - e) / factor;
f = f.truncateToDouble();
} else {
f = (value + e) / factor;
f = f.truncateToDouble();
}
return f * factor;
}