brief code analysis: FloatTag.getAsLong does not call floor in the conversion, as opposed to getAsByte, getAsShort, getAsInt, and DoubleTag.getAsLong which all do. that is the cause of the inconsistent behavior
FloatTag.getAsLong
floor
getAsByte
getAsShort
getAsInt
DoubleTag.getAsLong
brief code analysis:
FloatTag.getAsLongdoes not callfloorin the conversion, as opposed togetAsByte,getAsShort,getAsInt, andDoubleTag.getAsLongwhich all do. that is the cause of the inconsistent behavior