-2

We are working on financial calculations. JavaScript front-end code gives different results and C# backend gives different results. Please give me a solution to get the same result in both languages.

I mention two Cases in my example. The first case is not working and another is working.

I want results like C# code those are my expected results.

decimal TotalItemWiseRate = Convert.ToDecimal((Convert.ToDecimal(txtQuantity.Text) * Convert.ToDecimal(txtRate.Text)).ToString("0.00"));

myFunction();

function myFunction() {}

function setDecimalPoint(num) {
  var setNumber = parseFloat(num);
  if (isNaN(setNumber) || setNumber == 0) {
    return setNumber;
  } else {
    var dotcontain = (setNumber).toString().includes(".");
    if (dotcontain == true) {
      var a = (setNumber).toString().indexOf(".");
      setNumber = (setNumber).toString().substring(0, a + 4);
      return (roundNumber(setNumber, 2));
    } else {
      return (roundNumber(setNumber, 2));
    }
  }
}

document.getElementById("Case1").innerHTML = "Javascript result: " + 756.05 * 43.5;
document.getElementById("Case11").innerHTML = "Current function: " + setDecimalPoint(756.05 * 43.5);
document.getElementById("Case111").innerHTML = "Calculater result: " + 32888.175;
document.getElementById("Case1111").innerHTML = "C#/My Expected Result: " + 32888.18;

document.getElementById("Case2").innerHTML = "Javascript result: " + 6864.48 / 100;
document.getElementById("Case22").innerHTML = "Current function: " + setDecimalPoint(6864.48 / 100);
document.getElementById("Case222").innerHTML = "Calculater result: " + 68.6448;
document.getElementById("Case2222").innerHTML = "C#/My Expected Result: " + 68.64;

function roundNumber(num, scale) {
  if (!("" + num).includes("e")) {
    return +(Math.round(num + "e+" + scale) + "e-" + scale);
  } else {
    var arr = ("" + num).split("e");
    var sig = ""
    if (+arr[1] + scale > 0) {
      sig = "+";
    }
    return +(Math.round(+arr[0] + "e" + sig + (+arr[1] + scale)) + "e-" + scale);
  }
}
<p id="Case1"></p>
<p id="Case11"></p>
<p id="Case111"></p>
<p id="Case1111"></p>
<p id="Case2"></p>
<p id="Case22"></p>
<p id="Case222"></p>
<p id="Case2222"></p>
depperm
  • 10,606
  • 4
  • 43
  • 67
user3405179
  • 184
  • 11

1 Answers1

0

This single function is the simplest answer I found.

function setDecimalPoint(num) {
    if (isNaN(parseFloat(num)))
        return 0;
    else {
        var Number = parseFloat(num);
        var multiplicator = Math.pow(10, 2);
        Number = parseFloat((Number * multiplicator).toFixed(2));
        return (Math.round(Number) / multiplicator);
    }
}
user3405179
  • 184
  • 11