@eclass/grade-scales
Version:
Módulo para calcular notas en base a una escala.
49 lines (47 loc) • 1.29 kB
text/typescript
import { ScaleAttributes } from '../types'
/**
* Recibe una nota y la redondea segun el formato de la escala.
*
* @example const rounded = gradeRound(scale, 30.522)
*/
export const gradeRound = (scale: ScaleAttributes, grade: number): number => {
try {
let rounded: number | string
if (grade === null) {
return Number(0)
}
if (scale.decimals > 0) {
if (scale.decimals === 1) {
rounded = Number(
Math.round(Number(grade + 'e' + scale.decimals + 1)) +
'e-' +
scale.decimals +
1,
)
rounded = Number(
Math.round(Number(rounded + 'e' + scale.decimals)) +
'e-' +
scale.decimals,
)
} else {
rounded = Number(
Math.round(Number(grade + 'e' + scale.decimals)) +
'e-' +
scale.decimals,
)
}
} else if (scale.decimals <= 0) {
if (scale.roundType === 'ceil') {
rounded = Math.ceil(grade)
} else if (scale.roundType === 'floor') {
rounded = Math.floor(grade)
} else {
rounded = grade.toFixed(0)
}
}
return Number(rounded)
} catch (e) {
// En caso de fallar el redondeo entonces devolvemos un 0 por defecto.
return 0
}
}