我正在尝试使用代码获取十进制值:
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 将执行整数除法,这将截断任何小数部分并得到整数。
解决方案:
首先,在除法运算之前将整数转换为小数。这可确保 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 为零,您也会得到除法错误或特定消息,而不是产生整数的整个运算。