Teradata:除法和大小数

Teradata: Division and large decimals

我正在尝试除以两个小数 (15,2) 数字和 return 15 位的高精度小数,但我总是在超过 10 位小数时收到 [2616] 数字溢出错误, 是否有另一种写法来实现句点右边 15 位的小数结果?

select (cast(19983.74 as decimal(15,2))*1.0000000000000)/(cast(15897.40 as decimal(15,2))*1.0000000000000)

参见Teradata Documentation。结果精度的默认值取决于 MaxDecimal 设置,但对大于 MaxDecimal 设置的 CAST 将覆盖。

SELECT CAST(19983.74 AS DECIMAL(38,15))/15897.40

对于更复杂的计算,我更喜欢将第一个操作数转换为 NUMBER,这样可以获得最大可能的精度:

SELECT Cast(19983.74 AS NUMBER)/15897.40

1.25704454816510875992300627775611106219

终于投回你需要的任何东西:

SELECT Cast(Cast(19983.74 AS NUMBER)/15897.40 AS DECIMAL(38,15))

1.257044548165109