It seems to be the multiplication step where the problem arises. Nothing to do with DecimalFormat(). A simpler repro case:
WriteDump( IsValid( "integer", ( 76.04 * 100 ) ) )
//expected: true, Lucee 5.4.6.9 returns false
But use a different decimal value such as 56.04 and the validation passes.
Again, my hunch is that the multiplication operation is not actually returning an integer in certain cases for some reason, even though the dumped value appears to be one.
ACF 2023 seems to behave in the same way as Lucee 5.4.6.9 (i.e. incorrectly), but Lucee 6.1.1.118 correctly validates ( 76.04 * 100 ) as an integer
It looks like both Lucee 5 and ACF return the multiplication result as a java Double whereas Lucee 6 returns a BigDecimal.
I’m no java expert but I it seems that Doubles are bit flaky when it comes to floating point operations, which is perhaps why Lucee 6 has moved to BigDecimal.