Gaussian/Banker's Rounding in JavaScript
function evenRound(num, decimalPlaces) { | |
var d = decimalPlaces || 0; | |
var m = Math.pow(10, d); | |
var n = +(d ? num * m : num).toFixed(8); // Avoid rounding errors | |
var i = Math.floor(n), f = n - i; | |
var e = 1e-8; // Allow for rounding errors in f | |
var r = (f > 0.5 - e && f < 0.5 + e) ? | |
((i % 2 == 0) ? i : i + 1) : Math.round(n); | |
return d ? r / m : r; | |
} | |
console.log( evenRound(1.5) ); // 2 | |
console.log( evenRound(2.5) ); // 2 | |
console.log( evenRound(1.535, 2) ); // 1.54 | |
console.log( evenRound(1.525, 2) ); // 1.52 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
This comment has been minimized.
http://stackoverflow.com/questions/3108986/gaussian-bankers-rounding-in-javascript