halfEven static method

double halfEven(
  1. double value, {
  2. int precision = 2,
})

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;
}