【GAS入門】数値を四捨五入する方法

GASで数値を四捨五入したいんだけど、どうしたらいいんだろう?スプレッドシートで手作業するより簡単だといいなぁ…
猫男
猫男
catman
catman
よし、catmanがGASで数値を四捨五入する便利な方法を教えてやろう。まず基本から始めるぞ!

GASで数値を四捨五入する基本

GASで数値を四捨五入するなら、Math.round()関数を使います。

基本の形はこちら ↓

function roundNumber(num) {
  return Math.round(num);
}

Logger.log(roundNumber(3.6)); // 4
Logger.log(roundNumber(5.2)); // 5

Math.round()を使えば、小数点以下を丸めて最も近い整数にできます。

GASで異なる桁で数値を四捨五入する方法

小数点第n位で四捨五入したいときは、少し工夫が必要です。小数点をずらしてから四捨五入し、また元に戻します。

function roundToN(num, n) {
  var factor = Math.pow(10, n);
  return Math.round(num * factor) / factor;
}

Logger.log(roundToN(3.14159, 2)); // 3.14
Logger.log(roundToN(5.6789, 1)); // 5.7

Math.pow(10, n)が乗数を利用して小数点を移動させてから、元の位置に戻します。

すごい!nの値を変えるだけで任意の小数点以下の桁で四捨五入できるんですね!
猫男
猫男
catman
catman
この方法で数値を簡単に丸めることができるだろう。四捨五入した値はスクリプトで一気に処理、作業がぐっと効率化する!

 

練習問題:GASで四捨五入してみよう

任意の数値リストを用意し、指定の桁数で四捨五入し、その結果をスプレッドシートの別シートに書き出してみましょう。

 

 

解答と解説

function roundAndCopyToNewSheet(numbers, n) {
  var roundedNumbers = numbers.map(function(num) {
    var factor = Math.pow(10, n);
    return Math.round(num * factor) / factor;
  });

  var sheet = SpreadsheetApp.getActiveSpreadsheet().insertSheet('RoundedResults');
  var range = sheet.getRange(1, 1, roundedNumbers.length, 1);
  range.setValues(roundedNumbers.map(function(num) {
    return [num];
  }));
}

mapを用いて数値リストを効率的に新しいリストに変換し、四捨五入しています。
SpreadsheetApp.getActiveSpreadsheet().insertSheet()で新シートを作成し、データを書き込みます。
setValuesで多次元配列としてスプレッドシートにデータを設定しています。