public static float fastFloatValue(
      int fastSignum, long fast0, long fast1, long fast2,
      int fastIntegerDigitCount, int fastScale) {
    if (fastSignum == 0) {
      return 0;
    }
    BigDecimal bigDecimal = fastBigDecimalValue(
        fastSignum, fast0, fast1, fast2,
        fastIntegerDigitCount, fastScale);
    return bigDecimal.floatValue();
  }
Is the decimal value a long? Range -9,223,372,036,854,775,808 to 9,223,372,036,854,775,807.
                                   Long.MIN_VALUE                Long.MAX_VALUE

Emulates testing for no value corruption:
     bigDecimalValue().setScale(0).equals(BigDecimal.valueOf(bigDecimalValue().longValue()))

NOTE: Fractional digits are ignored in the test since fastLongValueClip() will
      remove them (round down).

@param fastSignum the sign (-1, 0, or +1)
@param fast0 word 0 of the internal representation
@param fast1 word 1
@param fast2 word 2
@param fastIntegerDigitCount the number of integer digits
@param fastScale the scale of the number
@return True when fastLongValueClip() will return a correct long.
storage-api/src/java/org/apache/hadoop/hive/common/type/FastHiveDecimalImpl.java