Atualizei o componente e problema voltou, depois de alguns testes localizei fonte do problema
O problema foi ocasionado por essa função
SetRoundMode(rmUp);
tive problemas com arrendamento quando a segunda casa decimal era 5 o sistema não arredondava para cima então incrementei essa função SetRoundMode(rmUp)
resolveu meu problema de arredondamento mas como o componente ACBBoleto faz uso da função round na função TACBrBancoBrasil.MontarCodigoBarras ele faz o arredondamento errado x.4201 para x.423 quanto que na verdade deveria fica x.42
fonte
Rotinas de arredondamento: Round, RoundTo, SimpleRoundTo, SetRoundMode e GetRoundMode (devmedia.com.br)
Uma das soluções para manter a compatibilidade foi essa na função TACBrBancoBrasil.MontarCodigoBarras
//Salva o modo de arredondamento utilizado pelo o usuário, caso não seja o modo default do delphi
ModeRoundUser:=GetRoundMode();
Try
//seta o modo default para evitar arredondamento errado tipo de "0.4201" para "0.423"
SetRoundMode(rmNearest);
CodigoBarras := IntToStrZero(Banco.Numero, 3) +
'9' +
FatorVencimento +
IntToStrZero(Round(ACBrTitulo.ValorDocumento * 100), 10) +
IfThen((Length(AConvenio) = 7), '000000', '') +
ANossoNumero +
IfThen((Length(AConvenio) < 7), PadLeft(OnlyNumber(Cedente.Agencia), 4, '0'), '') +
IfThen((Length(AConvenio) < 7), IntToStrZero(StrToIntDef(OnlyNumber(Cedente.Conta),0),8), '') +
ACBrTitulo.Carteira;
Finally
//Restabelece o arredondamento do usuário
SetRoundMode(ModeRoundUser);
end
ACBrBancoABCBrasil.pas