OK, I think I know why... our number is a result of a division, and:
/** Finds the result type of a decimal division operation. */
> public static DecimalType findDivisionDecimalType(
> int precision1, int scale1, int precision2, int scale2) {
> // adopted from
> //
> https://docs.microsoft.com/en-us/sql/t-sql/data-types/precision-scale-and-length-transact-sql
> int scale = Math.max(6, scale1 + precision2 + 1);
> int precision = precision1 - scale1 + scale2 + scale;
> if (precision > DecimalType.MAX_PRECISION) {
> scale = Math.max(6, DecimalType.MAX_PRECISION - (precision -
> scale));
> precision = DecimalType.MAX_PRECISION;
> }
> return new DecimalType(false, precision, scale);
> }
>
So the result has a max scale of 6......
Boot <[email protected]> 于2021年8月2日周一 下午5:46写道:
> I meet a similar issue that is the cast(decimal) function can not transfer
> the number to an expected precision in table API such as
> select(expressions). For transferring String to Expression I use the flink
> built-in function of parseExpression defined in ExpressionParser class.
> ---Original---
> *From:* "LIU Xiao"<[email protected]>
> *Date:* Mon, Aug 2, 2021 17:29 PM
> *To:* "user"<[email protected]>;
> *Subject:* How can I customize (BigDecimal) MathContext of
> flink-table-planner-blink?
>
> After upgrade Flink from 1.6 to 1.13 (flink-table-planner-blink), the
> result of our program changed:
> before: 10.38288597, after: 10.38288600
>
> We used to use "tableEnv.config().setDecimalContext(new
> MathContext(MathContext.DECIMAL128.getPrecision(), RoundingMode.DOWN))"
> with Flink 1.6, but flink-table-planner-blink seems to just ignore the
> config and use RoundingMode.HALF_UP and maybe DECIMAL(38, 18) is alose not
> enough for us.
>