JavaScript: 小数点第何位を指定した四捨五入など
January 20, 2023
JavaScript の四捨五入・切り上げ・切り捨ては Math.round()
、Math.ceil()
、Math.floor()
です。
これらのメソッドは整数を返すように作られているため、10 の位で丸めたい、小数点第 1 位で丸めたい、といったときは次のようにする必要があります。
console.log(Math.floor(123.456 * 0.01) / 0.01); // 100
console.log(Math.floor(123.456 * 0.1) / 0.1); // 120
console.log(Math.floor(123.456 * 1) / 1); // 123
console.log(Math.floor(123.456 * 10) / 10); // 123.4
console.log(Math.floor(123.456 * 100) / 100); // 123.45
これは次のように関数化することができます。
function floorByBase(value, base) {
return Math.floor(value * base) / base;
}
floorByBase(123.456, 0.1); // 120
floorByBase(123.456, 10); // 123.4
しかし引数として 0.1 や 10 を渡すのが少々分かりづらいです。
呼び出し側からすると、丸める桁数の位置を渡したくなります。
例えば小数点第 1 位で丸めるならば 1 を、小数点第 2 位で丸めるならば 2 を渡すといった具合です。
これはべき乗(演算子**
)を使うことで実現することができます。
// TypeScript で記載しています。
export default class MathUtil {
/**
* 任意の桁で四捨五入する。
*/
public static round(value: number, base: number = 0): number {
return Math.round(value * 10 ** base) / 10 ** base;
}
/**
* 任意の桁で切り上げする。
*/
public static ceil(value: number, base: number = 0): number {
return Math.ceil(value * 10 ** base) / 10 ** base;
}
/**
* 任意の桁で切り捨てする。
*/
public static floor(value: number, base: number = 0): number {
return Math.floor(value * 10 ** base) / 10 ** base;
}
}
console.log(MathUtil.floor(123.456, -2)); // 100
console.log(MathUtil.floor(123.456, -1)); // 120
console.log(MathUtil.floor(123.456, 0)); // 123
console.log(MathUtil.floor(123.456, 1)); // 123.4
console.log(MathUtil.floor(123.456, 2)); // 123.45