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

SQL中负数转正数数值异常求助:ABS函数结果不符预期

问题排查与解决

问题根源

你的代码逻辑顺序出错了:先执行convert(int, ABS(@journey_fare))时,ABS(-2.07)得到2.07,而convert(int, 2.07)会直接截断小数部分,只保留整数2,再乘以100自然得到200,这就是结果不符的核心原因。

修正方案

应该先把金额放大100倍,再取绝对值并转换为整数,这样就能完整保留小数部分的数值:

declare @ReimbursementCents int,
 @journey_fare numeric(7,2)
SET @journey_fare = -2.07

SET @ReimbursementCents = convert(int, ABS(@journey_fare * 100))
if (@ReimbursementCents > 0)
print @ReimbursementCents

如果需要处理类似2.075这类需要四舍五入的场景,也可以用ROUND函数先对数值处理再转换,但针对当前的-2.07,上述方法已经能得到207的正确结果。

内容的提问来源于stack exchange,提问作者SqlLearner

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 02:32:36