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
相关产品推荐
相关产品推荐

