extension/src/main/java/com/alibaba/fastjson2/support/arrow/ArrowUtils.java [237:309]:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
                if (b == '.') {
                    dot++;
                    if (dot > 1) {
                        break;
                    }
                    dotIndex = j;
                } else if (b >= '0' && b <= '9') {
                    unscaleValue = unscaleValue * 10 + (b - '0');
                } else {
                    unscaleValue = -1;
                    break;
                }
            }
            int scale = 0;
            if (unscaleValue >= 0 && dot <= 1) {
                if (dotIndex != -1) {
                    scale = len - (dotIndex - off) - 1;
                }

                boolean overflow = false;
                long unscaleValueV = unscaleValue;
                int scaleV = vector.getScale();
                if (scaleV > scale) {
                    for (int i = scale; i < scaleV; i++) {
                        unscaleValueV *= 10;
                        if (unscaleValueV < 0) {
                            overflow = true;
                            break;
                        }
                    }
                } else if (scaleV < scale) {
                    overflow = true;
                }

                if (!overflow) {
                    if (negative) {
                        unscaleValueV = -unscaleValueV;
                    }
                    BitVectorHelper.setBit(vector.getValidityBuffer(), row);

                    ArrowBuf dataBuffer = vector.getDataBuffer();
                    final long startIndex = (long) row * DECIMAL_TYPE_WIDTH;
                    if (LITTLE_ENDIAN) {
                        // Decimal stored as native-endian, need to swap data bytes before writing to ArrowBuf if LE
                        // Write LE data
                        dataBuffer.setLong(startIndex, unscaleValueV);
                    } else {
                        // Write BE data
                        dataBuffer.setLong(startIndex, 0);
                        long littleEndianValue = Long.reverseBytes(unscaleValueV);
                        dataBuffer.setLong(startIndex + 8, littleEndianValue);
                    }
                    return;
                }

                if (negative) {
                    unscaleValue = -unscaleValue;
                }

                BigDecimal decimal = BigDecimal.valueOf(unscaleValue, scale);
                if (vector.getScale() != decimal.scale()) {
                    decimal = decimal.setScale(vector.getScale(), RoundingMode.CEILING);
                }
                vector.set(row, decimal);
                return;
            }
        }

        BigDecimal decimal = TypeUtils.parseBigDecimal(bytes, off, len);
        if (vector.getScale() != decimal.scale()) {
            decimal = decimal.setScale(vector.getScale(), RoundingMode.CEILING);
        }
        vector.set(row, decimal);
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -



extension/src/main/java/com/alibaba/fastjson2/support/arrow/ArrowUtils.java [327:399]:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
                if (b == '.') {
                    dot++;
                    if (dot > 1) {
                        break;
                    }
                    dotIndex = j;
                } else if (b >= '0' && b <= '9') {
                    unscaleValue = unscaleValue * 10 + (b - '0');
                } else {
                    unscaleValue = -1;
                    break;
                }
            }
            int scale = 0;
            if (unscaleValue >= 0 && dot <= 1) {
                if (dotIndex != -1) {
                    scale = len - (dotIndex - off) - 1;
                }

                boolean overflow = false;
                long unscaleValueV = unscaleValue;
                int scaleV = vector.getScale();
                if (scaleV > scale) {
                    for (int i = scale; i < scaleV; i++) {
                        unscaleValueV *= 10;
                        if (unscaleValueV < 0) {
                            overflow = true;
                            break;
                        }
                    }
                } else if (scaleV < scale) {
                    overflow = true;
                }

                if (!overflow) {
                    if (negative) {
                        unscaleValueV = -unscaleValueV;
                    }
                    BitVectorHelper.setBit(vector.getValidityBuffer(), row);

                    ArrowBuf dataBuffer = vector.getDataBuffer();
                    final long startIndex = (long) row * DECIMAL_TYPE_WIDTH;
                    if (LITTLE_ENDIAN) {
                        // Decimal stored as native-endian, need to swap data bytes before writing to ArrowBuf if LE
                        // Write LE data
                        dataBuffer.setLong(startIndex, unscaleValueV);
                    } else {
                        // Write BE data
                        dataBuffer.setLong(startIndex, 0);
                        long littleEndianValue = Long.reverseBytes(unscaleValueV);
                        dataBuffer.setLong(startIndex + 8, littleEndianValue);
                    }
                    return;
                }

                if (negative) {
                    unscaleValue = -unscaleValue;
                }

                BigDecimal decimal = BigDecimal.valueOf(unscaleValue, scale);
                if (vector.getScale() != decimal.scale()) {
                    decimal = decimal.setScale(vector.getScale(), RoundingMode.CEILING);
                }
                vector.set(row, decimal);
                return;
            }
        }

        BigDecimal decimal = TypeUtils.parseBigDecimal(bytes, off, len);
        if (vector.getScale() != decimal.scale()) {
            decimal = decimal.setScale(vector.getScale(), RoundingMode.CEILING);
        }
        vector.set(row, decimal);
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -



