如何提高小数的精度

时间:2018-07-23 08:36:19

标签: sql-server precision

select 'foo ' + str(1.0/3.0, 15, 12)返回foo 0.333333000000。是否可以提高小数精度,以使小数点后的每个数字都是3

1 个答案:

答案 0 :(得分:2)

您需要提高输入值的准确性。用小数除法引用documentation时,得出的精度为p1 - s1 + s2 + max(6, s1 + p2 + 1),结果的小数位数为max(6, s1 + p2 + 1)

在您的表情中,1.03.0都是decimal(2,1)。这意味着您得到的精度为2 - 1 + 1 + max(6, 1 + 2 + 1) = 2 + max(6,5) = 2 + 6 = 8。对于您的比例,结果为max(6, 1 + 2 + 1) = max(6,5) = 6。因此,您的新数据类型是decimal(8,6)。这将导致表达式1.0 / 3.0 = 0.333333

然后,您将此值转换为字符串,精度为15,小数位数为120.333333作为decimal(15,12)就是0.333333000000,因为精度已经丢失; SQL Server不会记住该值在技术上是0.3~

因此,要获得所需的答案,您需要在初始值中添加更多的小数位。例如:

SELECT 'foo ' + CONVERT(varchar(20),CONVERT(decimal(15,12),1.000000/3.0000000));

或者,使用转化

SELECT 'foo ' + CONVERT(varchar(20),CONVERT(decimal(15,12),CONVERT(decimal(15,12),1.0)/3.0));

任何问题,请问。

相关问题