Colegas,
Linha 669 do arquivo Fontes\PCN2\pcnGerador.pas:
Conteúdo atual:
if StrToIntDef(Copy(ConteudoProcessado, pos(DecimalSeparator, ConteudoProcessado) + NumeroDecimais + 1, 6),0) > 0 then
walerta(ID, Tag, Descricao, ERR_MSG_MAXIMO_DECIMAIS + ' ' + IntToStr(NumeroDecimais));
Problema: Quando o valor é inteiro, pos(DecimalSeparator,ConteudoProcessado) = 0, e dessa forma, o alerta é sempre gerado.
Sugestão: Verificar diretamente na variável float valor se o número de casas decimais excede NumeroDecimais:
if not SameValue(Abs(Frac(valor*Power(10,NumeroDecimais))), 0.0, {epsilon = }0.0000001) then
walerta(ID, Tag, Descricao, ERR_MSG_MAXIMO_DECIMAIS + ' ' + IntToStr(NumeroDecimais));
Nota: Em tese, o valor de Abs(Frac(valor*Power(10,NumeroDecimais))) deveria ser exatamente igual a zero, caso não hajam mais casas decimais do que o esperado. Mas é sabido que comparações do tipo == com floats são problemáticas.
Nota 2: Tem que adicionar a unit Math nos uses.
Abraços.