2014-09-03 110 views
2

我有這個c#代碼。將SQL Server EXP的精度轉換結果丟失爲數字

double x = 5.8856571269513607 
double result = Math.Exp(-x * x) 

結果的值是0.00000000000000090286393216423726。

我想把這個轉移到T-SQL,所以我這樣做了。

declare @x numeric(17,16), 
     @result numeric(32,31) 

set @x = 5.8856571269513607 

set @result = CAST(exp([email protected] * @x) AS numeric(32,31)) 

@result的值是0.0000000000000009000000000000000

任何想法,爲什麼它在9後失去精度?

在此先感謝。

回答

2

這發生在使用EXP()函數將float值轉換回小數;其被限制爲17的最大精度在SQL服務器:

從MSDN:

使用科學記數法爲十進制或 數字被限制爲僅17位的精度值的浮點值的換算。精度高於17輪的任何值 歸零。

http://msdn.microsoft.com/en-gb/library/ms173773.aspx

+0

非常正確 - 我修改了我的答案。 – 2014-09-03 19:07:36

+0

謝謝你們的幫助。 – 2014-09-03 19:23:56

1

你的運氣了,我害怕。由於浮點數(這是EXP()返回的值)是如何轉換爲數值的,因此總是可以得到舍入。

http://msdn.microsoft.com/en-us/library/ms187928.aspx

「轉換使用科學記數法爲十進制或 數字僅17位被限制的精度值的任何值 精度比17輪爲零更高的浮點值的」

相關問題