There is over and over again confusion about “Length” when the datatype is “float”, althought both the Define-XML 2.0 and 2.1 specifications are very clear about this:
So, for your example “1.03” a Length of 3 is surely correct.
This is even somewhat better explained in the specification of the ODM 1.3.1 standard, upon which the Define-XML standard is based:
Meaning e.g. that for Length=3, SignificantDigits=2, the highest allowed value is 9.99 (10power(N-S) = 10power(3-2)= 10power(1) = 10.
So for this case, the value must be below (“magnitude less than”) 10. So e.g. 9.99 is still allowed.
Many people however believe that for “float”, the “Length” attribute represents the maximal string length, as it does for “text”.
It looks as P21 validation software also uses the (maximal) string length, which is wrong.
So, I would say that this is a false positive.
The Define-XML team is currently considering to make “Length” at least “optional” in future (or even drop it alltogether) as for modern systems and formats, it doesn’t make sense anymore. In earlier days it was necessary for setting up some types of databases (e.g. CHAR(n), VARCHAR(n) in SQL databases). The only function it still has (my personal opinion) is to steer the generation of the SAS Transport files with their fixed-field-length format (extremely ineffcient). For use with modern formats like Dataset-JSON and Dataset-XML, “Length” does not have a function anymore.