evmtools-node
Version:
このライブラリは、プライムブレインズ社で利用している「進捗管理ツール(Excel)」ファイルを読み込み、 プロジェクトの進捗状況や要員別の作業量を可視化するためのライブラリです。
95 lines • 3.41 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.calcRate = exports.average = exports.averageOrZero = exports.round = exports.subtract = exports.sum = exports.sumOrZero = exports.isValidNumber = void 0;
const isValidNumber = (value) => typeof value === 'number' && !Number.isNaN(value);
exports.isValidNumber = isValidNumber;
/**
* undefined や空配列なら 0 を返す
* 実際に数値があれば合計値を返す
* 戻り値の型は number (undefinedは返さない)
* @param numbers
* @param scale
* @returns
*/
const sumOrZero = (numbers, scale) => {
if (!numbers || numbers.length === 0)
return 0;
const nonNullDatas = numbers.filter((n) => n != null);
if (nonNullDatas.length === 0)
return 0;
const result = nonNullDatas.reduce((a, b) => a + b, 0);
return (0, exports.round)(result, scale);
};
exports.sumOrZero = sumOrZero;
/**
* 引数がundefined、引数はあるけど空配列とかのときはundefined
* 配列中の undefined/nullは除去して足し算する
* @param numbers (number | undefined)[] は、基本numberの配列だけど要素にundefinedもありえる型
* @param scale
* @returns
*/
const sum = (numbers, scale) => {
if (!numbers)
return undefined; //そもそも配列がundefined、もしくは空配列
const nonNullDatas = numbers.filter((n) => n != null); // undefined / nullを除去
if (nonNullDatas.length === 0)
return undefined; // なくなったらundefined
const result = nonNullDatas.reduce((a, b) => a + b, 0);
return (0, exports.round)(result, scale);
};
exports.sum = sum;
const subtract = (a, b) => {
if (typeof a !== 'number' || typeof b !== 'number') {
return undefined;
}
return a - b;
};
exports.subtract = subtract;
/**
* 四捨五入して、scale位にする
* @param num
* @param scale
* @returns
*/
const round = (num, scale = 10) => Math.round(num * 10 ** scale) / 10 ** scale;
exports.round = round;
const averageOrZero = (numbers, scale) => {
if (!numbers)
return 0; //そもそも配列がundefined、もしくは空配列
const nonNullDatas = numbers.filter((n) => n != null); // undefined / nullを除去
if (nonNullDatas.length === 0)
return 0;
const total = (0, exports.sum)(nonNullDatas);
if (total === undefined)
return 0;
const result = total / nonNullDatas.length;
return (0, exports.round)(result, scale);
};
exports.averageOrZero = averageOrZero;
const average = (numbers, scale) => {
if (!numbers)
return undefined; //そもそも配列がundefined、もしくは空配列
const nonNullDatas = numbers.filter((n) => n != null); // undefined / nullを除去
if (nonNullDatas.length === 0)
return undefined;
const total = (0, exports.sum)(nonNullDatas);
if (total === undefined)
return undefined;
const result = total / nonNullDatas.length;
return (0, exports.round)(result, scale);
};
exports.average = average;
/**
* a/bを返す。a,b数字かつb!=0 の時だけa/b それ以外はundefined
* @param a
* @param b
* @returns a/b
*/
const calcRate = (a, b) => {
if ((0, exports.isValidNumber)(b) && (0, exports.isValidNumber)(a) && b !== 0) {
return a / b;
}
return undefined;
};
exports.calcRate = calcRate;
//# sourceMappingURL=calcUtils.js.map