提问人:SqlLearner 提问时间:11/17/2023 更新时间:11/17/2023 访问量:35
如何在SQL中将负数转换为正数
how to convert a negative numeric to postive in sql
问:
我想将 -2.07 转换为 207,但使用 ABS(),如图所示;它返回 200 而不是 207。 请帮助我理解我在这里缺少什么。谢谢。
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
答:
-1赞
superdev
11/17/2023
#1
看起来问题在于运算顺序和乘以 100 的位置。目前,您正在将 @journey_fare 的绝对值转换为整数,然后将其乘以 100,这可能会产生负值的意外结果。
要达到使用 ABS() 将 -2.07 转换为 207 的预期结果,您应该首先乘以 100,然后转换为整数。 下面是更正后的代码:
DECLARE @ReimbursementCents INT,
@journey_fare NUMERIC(7,2);
SET @journey_fare = -2.07;
-- Multiply by 100 and then convert to integer
SET @ReimbursementCents = CONVERT(INT, ABS(@journey_fare) * 100);
IF (@ReimbursementCents > 0)
PRINT @ReimbursementCents;
现在,对于给定的 @journey_fare值 -2.07,此代码将正确输出 207。关键更改是在应用 ABS() 函数之前乘以 100。
评论
0赞
Jonas Metzler
11/17/2023
你试过这个吗?我想这会在MySQL中引发错误消息。请参阅文档:dev.mysql.com/doc/refman/8.2/en/...
0赞
SqlLearner
11/17/2023
@superdev 非常感谢你这么好地解释它。
评论
(ABS(@journey_fare) * 100) DIV 1