I coded the U.S. Navy Body Fat algorithm in Angular. Here is the math.

javascript dev.to

While standard fitness apps rely on generic BMI (Body Mass Index) which completely ignores the difference between muscle and fat, the U.S. Navy Body Fat formula is considered the most reliable "tape-measure" algorithm in clinical fitness.

To make this formula accessible, fast, and 100% private, I built a client-side Body Fat Calculator using Angular 18 and reactive Signals.

Try it live: https://tools.kandz.me/body-fat-percentage

The Mathematical Formulas ๐Ÿ“

The U.S. Navy algorithm relies on logarithmic relationships between different body circumferences (neck, waist, and hips for women) relative to height.

Here is the exact mathematical implementation I used for the calculation:

For Men:

495 / (1.0324 - 0.19077 * log10(waist - neck) + 0.15456 * log10(height)) - 450
Enter fullscreen mode Exit fullscreen mode

For Women:

495 / (1.29579 - 0.35004 * log10(waist + hip - neck) + 0.221 * log10(height)) - 450
Enter fullscreen mode Exit fullscreen mode

The Angular 18 Signal Implementation ๐Ÿ’ป

To ensure real-time rendering as the user types without lag, I used Angularโ€™s reactive computed signals. It automatically handles the conditional logic for male vs. female parameters:

bodyFat = computed(() => {
  const g = this.gender();
  const h = this.height();
  const w = this.waist();
  const n = this.neck();
  const hip = this.hip();

  if (h <= 0 || w <= 0 || n <= 0) return 0;

  let result = 0;
  if (g === 'male') {
    result = 495 / (1.0324 - 0.19077 * Math.log10(w - n) + 0.15456 * Math.log10(h)) - 450;
  } else {
    result = 495 / (1.29579 - 0.35004 * Math.log10(w + hip - n) + 0.221 * Math.log10(h)) - 450;
  }
  return Math.max(2, Math.min(60, result));
});
Enter fullscreen mode Exit fullscreen mode

Why Privacy is Vital in Health Tech ๐Ÿ›ก๏ธ

Most fitness and wellness trackers require users to create cloud accounts and log their personal biometrics in external databases, which are often sold to data brokers.

By running all logarithmic calculations locally in the browser's temporary memory (RAM), your measurements and results never leave your device.

Give the calculator a run and let me know if the Navy formula aligns with your actual composition: tools.kandz.me/body-fat-percentage

Source: dev.to

arrow_back Back to Tutorials