Может, не усложняя, просто конвертировать в число, а из него брать
toFixed()Fiddleinput.value = parseFloat(e.target.value).toFixed(2);
Позиция курсора в поле: свойство
selectionStart const pos = e.target.selectionStart; // запомнить положение курсора
// magic
e.target.selectionStart = e.target.selectionEnd = pos; // восстановить
Код обработчикаconst pos = e.target.selectionStart;
let v = parseFloat(e.target.value);
if( isNaN(v)) v = 0;
e.target.value = v.toFixed(2)
e.target.selectionStart = e.target.selectionEnd = pos;