ori-data-pipeline/bankersRound.js

16 lines
528 B
JavaScript

//from https://stackoverflow.com/a/49080858
function bankersRound(n, d=2) {
var x = n * Math.pow(10, d);
var r = Math.round(x);
var br = Math.abs(x) % 1 === 0.5 ? (r % 2 === 0 ? r : r-1) : r;
return br / Math.pow(10, d);
}
//this function divides obj.valuekey by totalamt, putting the result rounded to two positions in obj.resultkeyname.
export default async function(obj, valuekeyname, resultkeyname, totalamt) {
obj[resultkeyname] = bankersRound(obj[valuekeyname] / 100 * parseFloat(totalamt));
return obj;
}