技術ブログ

四捨五入

  • 桁数 に正の数を指定すると、数値の小数点以下 (右側) について、指定した桁数分が四捨五入されます。
  • 桁数 に 0 を指定すると、数値は最も近い整数として四捨五入されます。
  • 桁数 に負の数を指定すると、数値の小数点の左側 (整数部分) が四捨五入されます。
<script>
const button = document.getElementById('button');
button.addEventListener('click', function(e) {
  const number = document.getElementById('number').value;
  const digits = document.getElementById('digits').value;
  let answer = round(number, digits);
  document.getElementById('answer').value = answer;
});

/// <summary>
/// 累乗
/// </summary>
/// <params name="base"></params>
/// <params name="exponent"></params>
/// <returns></returns>
function power(base, exponent) {
  let pow = base;
  for (let i = 1; i < exponent; i++) {
    pow = (pow * base);
  }
  let i = String(pow).indexOf('.') + 1;
  if (i > 0) {
    pow = Number(String(pow).substring(0, i + exponent + 1));
  }
  return pow;
}

/// <summary>
/// 四捨五入
/// </summary>
/// <params name="n">数値</params>
/// <params name="d">桁数</params>
/// <returns></returns>
function round(n, d) {
  let ns = String(n).split('.');
  let abs = Number(String(d).replace('-', ''));
  let number = ns[0];
  let sign = 0;
  if (String(d).substring(0, 1) != '-') {
    sign = 1;
    number = (10 ** abs) * n;
  }
  if (abs > ns[sign].length) {
    return n;
  }
  if (sign == 1) {
    number = Number(number) + 0.5;
    number = (0.1 ** abs) * number;
    ns = String(number).split('.');
    number = Number(ns[0] + '.' + ns[1].substring(0, abs));
  } else {
    let digits = 5 * power(10, abs - 1);
    number = Number(n) + digits;
    number = String(number).substring(0, String(number).length - abs);
    number = Number(number) * power(10, abs);
  }
  return number;
}
</script>

コメント