[ 
https://issues.apache.org/jira/browse/FLINK-22182?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17331446#comment-17331446
 ] 

Shuo Cheng commented on FLINK-22182:
------------------------------------

Hi [~maver1ck], I think the result is not wrong, which involve the precision 
derivation of decimal data. (You can see details here 
[https://docs.microsoft.com/en-us/sql/t-sql/data-types/precision-scale-and-length-transact-sql).]
 

Briefly,

-> (38, 4) / (38, 4) -> (38, 6)

-> (38, 4) / (10, 0) -> (38, 6) 

 

`(CAST(28604 as decimal(38,4)))/(cast(451 as decimal(38,4))) - 1121` = 
`-1057.576497`

then 

 `-1057.576497 / 10` = -105.757650

(You can see the same result in other system, e.g, Spark).

 

Actually, the result for decimal data after multiple `CAST`s may lose some 
precision. So if you want more 'accurate' result, you can preserve more scale.

 

 

> Incorrect round when dividing decimals
> --------------------------------------
>
>                 Key: FLINK-22182
>                 URL: https://issues.apache.org/jira/browse/FLINK-22182
>             Project: Flink
>          Issue Type: Bug
>          Components: Table SQL / Runtime
>    Affects Versions: 1.12.2
>            Reporter: Maciej Bryński
>            Priority: Major
>
> Hi,
> I have following problem:
> This query:
> {code:java}
> select ((CAST(28604 as decimal(38,4)))/(cast(451 as decimal(38,4))) - 
> 1121)/10 ;
> {code}
> Gives following answer:
> {code:java}
> -105.757650000000000000
> {code}
> Correct answer should be:
> {code:java}
> -105,75764966740576496674057649667
> {code}
> Why the result is rounded to 5th decimal place ?
> Saving both values back to Decimal(38,4) column will give different results: 
> -105.7577 vs -105.7576 (where second one is correct)



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to