sql和clr中舍入的差异

时间:2009-10-02 21:27:35

标签: sql clr rounding-error

我搜索过但找不到答案。我仔细检查了SQL和CLR之间的数据类型,我似乎有正确的。但是我在使用CLR和SQL之间得到了不同的结果。不多,但足以超过一分钱。这是不可接受的。

VB.NET中的示例

Dim dLoanAmount As Decimal = 169500  
Dim dNetDiscount As Decimal = 100.871  
Dim dDiscountPremium As Decimal = (dLoanAmount * (dNetDiscount - 100.0) / 100.0) 
Console.WriteLine("original amount is " + dDiscountPremium.ToString())  

将显示1476.34499999999

SQL中的示例

DECLARE @loanAmt decimal (20,10)  
DECLARE @discount decimal (20,10)  
SET @loanAmt = 169500.000000  
SET @discount = 100.871000  
select   @loanAmt*(@discount-100.0)/100.0  

返回1476.345000000000000

我们必须将VB用于某些文档,但对于某些文件传输,我们使用sql。任何人有任何建议为什么这是?

欢呼声
鲍勃

1 个答案:

答案 0 :(得分:2)

您使用的是双文字而不是十进制文字。试试这个:

Dim dLoanAmount As Decimal = 169500D
Dim dNetDiscount As Decimal = 100.871D  
Dim dDiscountPremium As Decimal = (dLoanAmount * (dNetDiscount - 100D) / 100D) 
Console.WriteLine("original amount is " + dDiscountPremium.ToString())