SQL Server:从除法中获取十进制值

问题描述 投票:0回答:1

我正在尝试使用代码获取十进制值:

declare @percents decimal(16, 2) = convert(decimal(16, 2), 100);

declare @fifteenPercent decimal(16,2) = convert(decimal(16,2), @fifteen) * @percents / convert(decimal(16, 2), @total);

@total
@fifteen
变量都是整数。我得到的是以下选择中的整数

select 
    '1-15: (' + trim(str(@fifteen)) +') ' + trim(str(@fifteenPercent)) + '%' as ratingB

我明白了

1-15: (38230) 7%

我想要

1-15: (38230) 7.28%

我将所有变量转换为

decimal(16,2)
并且仍然得到整数值

sql sql-server math procedure
1个回答
0
投票

为了确保在 SQL 中执行计算时得到小数值,您需要确保除法运算涉及小数类型而不是整数。如果运算的任何部分涉及整数,SQL 将执行整数除法,这将截断任何小数部分并得到整数。

解决方案:

首先,在除法运算之前将整数转换为小数。这可确保 SQL 将除法视为十进制运算。

declare @percents decimal(16,2) = convert(decimal(16,2), 100);

declare @fifteenPercentage decimal(16,2) = 
    (convert(decimal(16,2), @fifteen) / convert(decimal(16,2), @total)) * @percents;

select '1-15: (' + trim(str(@fifteen)) + ') ' + trim(str(@fifteenPercentage)) + '%' as ratingB;

通过在执行乘法和除法之前将@fifteen和@total转换为decimal(16,2),SQL将以十进制格式处理整个运算,并保留结果中的小数部分。

convert(decimal(16,2), @total) 确保即使 @total 为零,您也会得到除法错误或特定消息,而不是产生整数的整个运算。

© www.soinside.com 2019 - 2024. All rights reserved.