@Override
    public Expr uncheckedCastTo(Type targetType) throws AnalysisException {
        if (targetType.getPrimitiveType().isDecimalV3Type()) {
            this.type = targetType;
            checkLiteralOverflowInBinaryStyle(this.value, (ScalarType) targetType);
            // round
            int realScale = getRealScale(value);
            int scale = ((ScalarType) targetType).getScalarScale();
            if (scale <= realScale) {
                this.value = this.value.setScale(scale, RoundingMode.HALF_UP);
            }
            return this;
        } else if (targetType.getPrimitiveType().isDecimalV2Type()) {
            this.type = targetType;
            return this;
        } else if (targetType.isFloatingPointType()) {
            return new FloatLiteral(value.doubleValue(), targetType);
        } else if (targetType.isIntegerType()) {
            return new IntLiteral(value.longValue(), targetType);
        } else if (targetType.isStringType()) {
            return new StringLiteral(value.toString());
        }
        return super.uncheckedCastTo(targetType);
    }
@Test(expected = Throwable.class)
    public void testDealWithSingularDecimalLiteralAbnormal3() throws AnalysisException {
        Type type = ScalarType.createDecimalV3Type(PrimitiveType.DECIMAL64, 9, 2);
        DecimalLiteral decimalLiteral = new DecimalLiteral("92233720368547758.08");
        decimalLiteral.uncheckedCastTo(type);
    }