1

I have a fee calculator. The port calculates their fees using C#, whereas our backend uses Node. We need to make sure the calculator is perfect; right now, it's out by 1c.

The following C# code:

using System;

class MainClass {
  public static void Main (string[] args) {
    Console.WriteLine(decimal.Round(1.605m,2));
    Console.WriteLine(decimal.Round(1.615m,2));
    Console.WriteLine(decimal.Round(1.625m,2));
    Console.WriteLine(decimal.Round(1.635m,2));
    Console.WriteLine(decimal.Round(1.645m,2));
    Console.WriteLine(decimal.Round(1.655m,2));
    Console.WriteLine(decimal.Round(1.665m,2));
    Console.WriteLine(decimal.Round(1.675m,2));
    Console.WriteLine(decimal.Round(1.685m,2));
    Console.WriteLine(decimal.Round(1.695m,2));
  }
}

Comes out with:

1.60
1.62
1.62
1.64
1.64
1.66
1.66
1.68
1.68
1.68

I need an equivalent rounding function in JS which will give me the same result. I've already tried two:

    round = (n, decimals = 2) => {
      // return n.toFixed(decimals) // doesn't work
      return Number((Math.round(n + 'e' + decimals) + 'e-' + decimals)) // doesn't work
    }

    console.log(round(1.605))
    console.log(round(1.615))
    console.log(round(1.625))
    console.log(round(1.635))
    console.log(round(1.645))
    console.log(round(1.655))
    console.log(round(1.665))
    console.log(round(1.675))
    console.log(round(1.685))
    console.log(round(1.695))

With toFixed() the result is:

1.60
1.61
1.63
1.64
1.65
1.66
1.67
1.68
1.69
1.70

With the other one using Math.round the result is:

1.61
1.62
1.63
1.64
1.65
1.66
1.67
1.68
1.69
1.70

Solutions?

Merc
  • 16,277
  • 18
  • 79
  • 122

0 Answers0