Tentei, mas não consegui.
Como preciso do sistema, deixei 2 inputs lado a lado.
O primeiro input é o editável, onde o usuário digita o valor desejado. Este input principal exibe, durante a abertura de algum registro, o conteúdo da variável "valor". Ele corrige o erro de o usuário digitar ponto ou vírgula decimal automaticamente. O ponto fraco é que não força a exibição de 2 casas decimais.
Para isso coloquei ao lado um outro input, que ficou num tom claro e não é editável, mas apresenta sempre o valor em 2 casa decimais.
Feio, mas funcional.
<input id="valor" size="4" type="number" name="valor" min="0" value="<?php echo $valor; ?>"
step="0.01" pattern="^\d+(?:\.\d{1,2})?$"
onblur="this.parentNode.parentNode.style.backgroundColor=/^\d+(?:\.\d{1,2})?$/.test(this.value)?'inherit':'red'" />
<input placeholder="<?php echo $valor; ?>" size="3" />