Bom dia!
Veja no código fonte que o Juliomar postou que o ACBr está usando a função RoundABNT().
RoundABNT() segue as normas da ABNT (Associação Brasileira de Normas Técnicas) a qual tem em uma de suas regras a seguinte instrução:
Exemplo: 0,50 x 22,50 = 11,125
Aplicando a regra:
Algarismo a ser conservado: 2
é par? -> Sim
é seguido de 5? -> Sim
posterior ao 5 são zeros? -> Sim
Então o algarimos a ser conservado (que é o 2) permanece sem alteração: Logo 0,50 x 22,50 = 11,12. (relembrando... seguindo as normas da ABNT)
Caso na posição do 2 (o algarismo a ser conservado) fosse um número impar, mudaria a situação, pois a regra seria:
Então se você tivesse 11,135 o resultado seria 11,14.
Então neste caso a tua função que calculou o 0,50 x 22,50 para informar em vprod 11,13 deverá usar também o arredondamento ABNT.