Разница в округлении в sql и clr - PullRequest
1 голос
/ 03 октября 2009

Я искал и не могу найти ответ. Я дважды проверил типы данных между 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 Ответ

2 голосов
/ 03 октября 2009

Вы используете двойные литералы вместо десятичных. Попробуйте это:

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())
...