int 类型的算术溢出错误,值 = 4957500001.400178

Arithmetic overflow error for type int, value = 4957500001.400178

提问人:gkoul 提问时间:6/13/2018 更新时间:11/12/2023 访问量:6332

问:

我知道过去也曾问过类似的问题,但我认为我的情况略有不同。我有一列具有对数值,我正在尝试使用以下公式反转它们:SELECT POWER(10,CAST(9.695262723 AS NUMERIC(30,15)))

假设该值是该列的值之一。 尝试运行此查询时,我得到一个 .9.695262723Arithmetic overflow error for type int, value = 4957500001.400178

另一方面,相同的查询适用于较小的值,例如SELECT POWER(10,CAST(8.662644523 AS NUMERIC(30,15)))

如何克服该错误并计算我拥有的 log10 条目的反值?仅供参考,表中存在的较大值(以 log10 刻度表示)是 。12.27256096

sql-server t-sql 转换 对数算 溢出

评论


答:

9赞 Thom A 6/13/2018 #1

这里的问题是您的第一个输入参数 (),默认情况下,SQL Server 会将其视为数据类型。最大值为 2^31-1 (2,147,483,647),而数字 4,957,500,001 远大于此值,因此需要使用 :10intintbigint

SELECT POWER(CONVERT(bigint,10),CONVERT(numeric(30,15),9.695262723));

如果需要保留小数位,请使用具有足够大比例和精度的数字,而不是 bigint