StarRocks/starrocks

DECIMAL(38,18) / DECIMAL(38,18) silently returns NULL due to overflow, while equivalent multiplication works correctly

已关闭

#73,784 创建于 2026年5月25日

 (2 条评论) (0 个反应) (0 位负责人)Java (1,246 个派生)batch import
good first issuetype/bug

仓库指标

星标
 (5,717 个星标)
PR 合并指标
 (平均合并 1天 5小时) (30 天内合并 1,000 个 PR)

描述

Issue

When dividing two DECIMAL(38,18) values (the maximum supported decimal precision in StarRocks), the result silently returns NULL due to precision overflow. The equivalent operation using multiplication with POW(..., -1) returns the correct result.

Steps to reproduce Returns NULL (bug)

SELECT CAST(2672.925686105492400095 AS DECIMAL(38,18))
     / CAST(421.193403692563637349 AS DECIMAL(38,18));

Returns 6.346076796721411 (works)

SELECT CAST(2672.925686105492400095 AS DECIMAL(38,18))
     * POW(CAST(421.193403692563637349 AS DECIMAL(38,18)), -1);

Workaround: explicit CAST to DOUBLE before division (works)

SELECT CAST(CAST(2672.925686105492400095 AS DECIMAL(38,18)) AS DOUBLE)
     / CAST(CAST(421.193403692563637349 AS DECIMAL(38,18)) AS DOUBLE);

Expected behavior

The session variable decimal_overflow_to_double should apply to the / operator the same way it applies to *.

Actual behavior

Division of two DECIMAL(38,18) values silently returns NULL. No error, no warning.

Starrocks version: 3.5.14

贡献者指南