As a validation rule, you'd multiply by 1000 and round, then multiply by 10, and compare it to multiplying by 10000. If the results don't match, you have more than one decimal present.
ACC__c < 0 || ACC__c > 1 || (FLOOR(ACC__c * 1000) * 10 <> ACC__c * 10000)
This works by checking if the rounded version equals the unrounded version. If they don't match, we'll throw an error.
Note that Percent fields are stored in decimal notation, where 0 means 0% and 1 means 100%. For this reason, we compare the boundaries with 0 and 1.
Alternatively, as @Derek F pointed out, we can save a bunch of compiled size by using MOD:
Acc__c < 0 || Acc__c > 1 || MOD(Acc__c * 10000, 10) <> 0