2010-02-04 6 views
0

J'ai cette simple requête:Comment obtenir Microsoft SQL MATH POWER pour montrer comme décimal et non comme INT (ce qu'il semble faire)?

SELECT POWER((1 + 3/100), (1/365)) 

Selon MS SQL POWER ((1 + 3/100), (1/365)) = 1 quand il est 1,000080986

en fait Comment obtenir la puissance pour retourner Decimal au lieu de int. Ce sujet semble similaire à Raising a decimal to a power of decimal? mais celui-ci touche C# et j'ai besoin de SQL. S'il n'y a pas d'autre moyen, je vais utiliser C# way.

Le message édité pour afficher le problème sans aucune information spécifique.

Répondre

2

La précision est perdue parce que vos valeurs d'entrée sont tous des entiers.

Essayez

SELECT POWER((1.0 + 3.0/100.0), (1.0/365.0)) 

Si cela ne donne pas suffisamment de précision, définissaient les entrées POWER comme flotteurs:

SELECT POWER((CAST(1.0 as float) + CAST(3.0 AS float)/100.0), (1.0/365.0)) 
+0

Merci, la précision est importante, c'est pourquoi je choisis votre réponse comme acceptée. – MadBoy

+0

@MadBoy: Précision avec flotteur ...? Juste moulé en décimal (38, 19) ou quelque chose – gbn

+0

j'aurais dû être plus précis. La précision jusqu'à 8 places est importante, donc je vais couper ce que le flotteur est revenu de toute façon. – MadBoy

1

Essayer:

SELECT POWER((1.0 + 3.0/100), (1.0/365)) 

Une expression de ce type de 1 + 3/100 utilise implicitement arithmétique de nombres entiers, de sorte 3/100 est égal à zéro, que la partie décimale est tronquée.

+0

Merci, travaux, mais la précision est importante, donc je l'ai utilisé la solution de Ed . – MadBoy

1
SELECT POWER((1 + 3.0/100), (1/365.0)) 

La même chose se produire dans une langue (grand public). Problème de priorité d'opérateur simple et arithmétique d'entier. Rien d'autre

  • 1/365 = 0
  • Tout au pouvoir zéro = 1
  • Et le côté gauche de 1 + 3/100 serait aussi égal à un
+0

C'est également incorrect; vous faites toujours de l'arithmétique entière (et de la troncature gettig) quand vous faites 3/100. Ah! vous l'avez édité! –

+0

@Mitch Wheat: oui,/évalué avant + me sert droit pour se précipiter – gbn