You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL Server中语义相同的语句为何返回不同BIGINT结果?

问题原因解释

核心差异在于两条语句的中间计算使用了不同的数据类型,导致精度表现不同:

  • 第一条语句的计算过程:

    • 10e10是SQL Server默认的float(浮点数)类型,浮点数属于近似数值类型,它通过二进制存储数据,无法精确表示所有十进制整数——尤其是当数值的有效位数超过浮点数的精度范围(float约15-17位有效数字)时,会产生微小的近似误差。
    • 10e10 * 3539628的精确值是353962800000000000,但float无法精确存储这个数,实际计算出的结果会和精确值有细微偏差;后续加上3539628再转成bigint时,这个偏差被保留,最终结果出现误差。
  • 第二条语句的计算过程:

    • 353962800000000000是在bigint类型范围内的整数(bigint的取值范围是-9223372036854775808到9223372036854775807),SQL Server会将其识别为bigint(整数类型属于精确数值类型)。
    • 两个bigint数值相加是完全精确的整数运算,不会产生任何近似误差,因此最终转换后的结果是准确的。

如果要生成唯一且精确的bigint数值,务必避免用浮点数参与中间运算,全程使用整数类型的操作才能保证结果的准确性。

内容的提问来源于stack exchange,提问作者Boris Handžiski

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 07:07:38