首页 > 解决方案 > Java Int 溢出逻辑

问题描述

我正在尝试在 SQL (SQL Server 2016) 中复制 Java int 上溢/下溢逻辑。逻辑是什么:

(a * b) + c

其中 a、b 和 c 的范围可以从 -2147483648 到 2147483648(SQL 中 int 的范围)

例如,在java中如果计算(135 * 12) + 2147483647,结果是-2147482029。在 SQL 中,对于 int,它会因溢出而出错。我需要在 SQL 中复制 java 上溢/下溢逻辑,所以它的工作原理相同并产生一个 int。

标签: sqlsql-servermath

解决方案


我想到了

declare @result bigint

set @result = ((@a* @b) + @c) % 4294967296
IF @result >= 2147483648 SET @result = @result - 4294967296
IF @result < -2147483648 SET @result = @result + 4294967296

推荐阅读