2009-10-02 4 views
1

J'ai cherché et ne trouve pas la réponse. J'ai vérifié les types de données entre SQL et CLR et je semble avoir cela correct. Mais j'obtiens un résultat différent entre l'utilisation de CLR et SQL. Pas beaucoup, mais assez pour être sur un sou. Et ce n'est pas acceptable.Différence d'arrondi en sql et clr

Exemple dans 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()) 

affiche 1476,34499999999

Exemple dans 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 

qui retourne 1476,345000000000000

Nous devons utiliser le VB pour certains documents, mais pour certains transferts de fichiers, nous utilisons sql. Quelqu'un at-il des suggestions pourquoi c'est?

acclamations
bob

Répondre

2

Vous utilisez doubles littéraux au lieu de les décimales. Essayez ceci:

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()) 
+0

D'abord, bon retour –

+0

Cela a fonctionné très bien, mais je tire les données d'une base de données et ce sont les valeurs. Je les ai juste mis pour l'exemple. Le type de données dans le tableau est décimal (16,6) pour le montant du prêt et le rabais. Merci pour votre temps. –

+0

Vous devez trouver * exactement * ce que sont les valeurs dans la base de données et .NET ensuite. Comme vous pouvez le voir, lorsque vous obtenez les bonnes valeurs dans .NET, l'arithmétique fonctionne bien. –