- 桁数 に正の数を指定すると、数値の小数点以下 (右側) について、指定した桁数分が四捨五入されます。
- 桁数 に 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>
コメント