halfEven static method
Banker's rounding (rounds halves to nearest even).
Also known as "round half to even" or "unbiased rounding". This minimizes cumulative rounding errors over many operations.
1.5 → 2, 2.5 → 2, 3.5 → 4, 4.5 → 4
Implementation
static double halfEven(double value, {int precision = 2}) {
final factor = math.pow(10, precision);
final scaled = value * factor;
final integer = scaled.truncateToDouble();
final fraction = (scaled - integer).abs();
// Check if it's exactly a half
if ((fraction - 0.5).abs() < 1e-10) {
// Round to nearest even
if (integer.toInt().isEven) {
return integer / factor;
} else {
return (scaled >= 0 ? integer + 1 : integer - 1) / factor;
}
}
// Not a half, use standard rounding
return scaled.roundToDouble() / factor;
}