GASで小数点の切り捨て・切り上げの丸め方法(ceil,floor,trunc)

Google Apps Script(GAS)には数値の小数点以下の切り捨てや切り捨てなど、丸める方法がいくつか用意されています。

ceilやfloor、truncなどそれぞれのメソッドの使い方と、丸め方の挙動の違いについて解説します。

小数点以下を丸めて整数に

プログラミングにおいて小数点以下の数値を丸める処理はよく行われます。

Google Apps Script(GAS)では、スプレッドシートに値を出力する際に、セルに格納された値を見やすくなるように小数を丸めます。

最近で言えば、消費税の計算などで食品などは軽減税率で8%計算になり、税額が小数点を含むことがあります。

そうした計算時に小数点以下を丸めて整数の金額にする対応が必要です。

GASで小数点の丸める方法は3種類

Google Apps Script(GAS)では、小数点を丸める方法として、3つのメソッドが利用することができます。

  1. Math.ceilメソッド
  2. Math.floorメソッド
  3. Math.truncメソッド

それぞれ小数点以下を丸める方法や丸めた結果が少し異なります。

Math.ceilメソッド(切り上げ)

小数点を丸める1つ目の方法はceilメソッドです。

引数に指定した数値について小数点以下を切り上げる形で、整数に丸めます。

Math.ceil(num)

どれだけ小さくても、小数点以下が0でない限りは切り上げが行われるため、3.000003もceilメソッドで丸めると、4になります。

Math.floorメソッド(切り捨て)

2つ目の小数点を丸める方法はfloorメソッドです。

引数に指定した数値について小数点以下を切り捨てる形で、整数に丸めます。

Math.floor(num)

切り捨てなので、3.999のようなどれだけ4に近い数字であっても、Math.foor(3.999)を実行すると、3になります。

Math.truncメソッド(切り捨て)

小数点以下を丸める3つめの方法はtruncメソッドです。

truncメソッドは、floorメソッドと同じように小数点以下を切り捨てる形で整数に丸めます。

Math.trunc(num)

floorと同じ切り捨てにはなりますが、truncは負の数の場合に切り捨ての挙動が異なります。

ceil,floor,truncの丸め挙動の違い

先程紹介した3種類の丸めを行うメソッドはいずれの挙動も同じではありません。

ceilは小数点以下を切り上げるのに対し、floorとtruncは切り捨てが行われます。

切り捨てを行うfloorとtruncの違いですが、正の数の場合の挙動は同じです。

しかし、負の数の時にfloorとtruncで切り捨ての方向が異なります。

Google Apps Script(GAS)での小数を丸めるceil,floor,truncの挙動の違いを図示

負の数を引数としたMath.floorでは、左方向に切り捨てされ、-3.4の場合は、-4になります。

一方、Math.truncの場合は0の方向に切り捨てされ、-3.4の場合は-3になります。

truncのほうが直感的に分かりやすい切り捨てです。

小数点以下を丸めて整数にするGASサンプルコード

実際に色々な数値に対して、それぞれのメソッドを使って小数点以下を丸めるGoogle Apps Script(GAS)のサンプルコードを解説します。

正の数の小数と負の数の小数に対し、ceil,floor,truncの挙動を確認します。

function floatToInteger() {
  //小数点を含んだ数値(正の数)を定義し、3タイプの丸めをログ出力
  let num = 3.000000000003;
  console.log(Math.ceil(num));
  console.log(Math.floor(num));
  console.log(Math.trunc(num));
  //負の数の小数点を含んだ数値に変更し、3タイプの丸めをログ出力
  num = -3.000000000003;;
  console.log(Math.ceil(num));
  console.log(Math.floor(num));
  console.log(Math.trunc(num));
}

それぞれの小数を丸めた結果をログ出力しています。

Google Apps Script(GAS)で小数を丸めてせいすうにするMath.ceil,Math.floor,Math.truncのサンプルコード

3種類の丸めるメソッドの挙動を解説した図の通りにログ出力が行われています。

truncはV8ランタイムのみ利用可

truncメソッドが、小数点を丸めるceilメソッドやfloorメソッドと異なる点は、V8ランタイムでのみ実行できる点です。

truncメソッドはES2015のJavaScriptから利用可能になりました。

そのため、V8ランタイムではない、旧バージョンのGoogle Apps Script(GAS)では実行できません。

Google Apps Script(GAS)のtruncはV8ランタイムでのみ利用可能

GASプロジェクトでV8ランタイムを無効にしてしまうと、truncメソッドを実行しようとすると、エラーが生じます。

Google Apps Script(GAS)のtruncはV8ランタイムを無効にすると実行エラー

truncメソッドを使う場合は、GASプロジェクト設定でV8ランタイムが有効になっていることを確認して利用しましょう。

GASで四捨五入したい場合はround

これまで紹介してきた、ceilメソッドは切り上げ、floorメソッドとtruncメソッドは切り捨てして小数点以下を丸めました。

小数点を丸める方法には、切り上げ・切り捨て以外に、四捨五入があります。

四捨五入は、小数点第1位が4以下の場合は切り捨て、5以上の場合は切り上げを行う方法です。

Google Apps Script(GAS)には、四捨五入を行いたい場合に、Math.roundメソッドが用意されています。

日本では四捨五入を活用するケースも多いので、roundメソッドも利用しましょう。

まとめ・終わりに

今回、Google Apps Script(GAS)のスクリプトで小数点以下の数値を丸めて整数にする方法を紹介しました。

小数を丸めるメソッドとして、Math.ceil、Math.floor、Math.truncの3パターンがあります。

それぞれ切り上げ・切り捨て・切り捨てとなっており、動作が異なるため、どのように小数点以下を丸めたいかによってメソッドを選択する必要があります。

その他に、四捨五入したい場合はMath.roundメソッドがあるので、そちらで四捨五入が可能です。

小数の丸め処理は1つだけではあまり誤差が出ないですが、数が増えるほど誤差が出てくるので、適切な丸めメソッドを選択しましょう。