You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@spark.apache.org by "Yan Jian (JIRA)" <ji...@apache.org> on 2018/06/20 13:13:00 UTC

[jira] [Updated] (SPARK-24606) Decimals multiplication and division may be null due to the result precision overflow

     [ https://issues.apache.org/jira/browse/SPARK-24606?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Yan Jian updated SPARK-24606:
-----------------------------
    Description: 
Spark performs mul / div on Decimals via Java's BigDecimal, whose scale may greater than its precision, with 38 precision limit. 

If the result BigDecimal's precision is 38, and its scale is greater than 38 ( 39 e.g. ), the converted decimal (in spark SQL) is in precision of 40 ( = 39 + 1, and > 38 ).

 

Run following SQLs to reproduce this:
{code:sql}
select (cast (1.0 as decimal(38,37))) * 1.8;
select (cast (0.00000777776666655555444443333387654321 as decimal(38,37))) / 99;
{code}

  was:
Spark performs mul / div on Decimals via Java's BigDecimal, whose scale may greater than its precision, with 38 precision limit. If the result BigDecimal's precision is 38, and its scale is greater than 38 ( 39 etc. ), the converted decimal (in spark SQL) is in precision of 40 ( = 39 + 1 ).

 

Run following SQLs to reproduce this:
{code:sql}
select (cast (1.0 as decimal(38,37))) * 1.8;
select (cast (0.00000777776666655555444443333387654321 as decimal(38,37))) / 99;
{code}


> Decimals multiplication and division may be null due to the result precision overflow
> -------------------------------------------------------------------------------------
>
>                 Key: SPARK-24606
>                 URL: https://issues.apache.org/jira/browse/SPARK-24606
>             Project: Spark
>          Issue Type: Bug
>          Components: SQL
>    Affects Versions: 2.2.1
>            Reporter: Yan Jian
>            Priority: Blocker
>
> Spark performs mul / div on Decimals via Java's BigDecimal, whose scale may greater than its precision, with 38 precision limit. 
> If the result BigDecimal's precision is 38, and its scale is greater than 38 ( 39 e.g. ), the converted decimal (in spark SQL) is in precision of 40 ( = 39 + 1, and > 38 ).
>  
> Run following SQLs to reproduce this:
> {code:sql}
> select (cast (1.0 as decimal(38,37))) * 1.8;
> select (cast (0.00000777776666655555444443333387654321 as decimal(38,37))) / 99;
> {code}



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

---------------------------------------------------------------------
To unsubscribe, e-mail: issues-unsubscribe@spark.apache.org
For additional commands, e-mail: issues-help@spark.apache.org