2012-07-09 27 views
1

我需要以下雙值存儲在SQL Server:如何把SQL服務器上的double類型?

double x = 52.22105994970536;

什麼SQL Server數據類型,我應該使用這種類型的存儲值。也許decimalfloat

我不確定這是否相關,但我需要使用.而不是,來存儲這些值以分隔值的小數部分。 SQL Server中是否存在一個設置,我應該注意確保這種情況發生?

+1

你在混淆數據類型和它們的*常規*字符串表示。如果您存儲爲例如'decimal','float'或'real',你不會存儲'.'(或'''')。這些東西只在值被格式化爲字符串時纔會出現。 – 2012-07-09 10:54:07

+0

http://stackoverflow.com/questions/1209181/what-represents-a-double-in-sql-server – Pluc 2012-07-09 10:54:57

回答

1

我不確定這是否相關,但我需要用a存儲這些值。不是,到 分開值的小數部分。 SQL Server中是否存在一個設置,我應該注意確保發生這種情況?

不,完全可以學習編程,直到你意識到這根本不是一個問題 - 小數存儲爲小數。 「」或「,」是可視化轉換(「ToString」調用,可以這麼說)的一部分,以打印該值並且與該值無關。

如果你想存儲一個double,你想存儲一個double。點。如果你想確保你的程序使用「。」來表示它,然後正確編程用戶界面,但不要打擾SQL Server的內部存儲。通常它們以語言環境顯示 - 在大多數情況下比硬編碼更智能。所以,你可能會強迫更改UI語言環境?或者將轉換硬編碼,以便在每次打印出值時應用。

我應該使用什麼SQL Server數據類型來存儲此類型的值。也許小數或 浮動?

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

解釋的SQL Server的數據類型。

選擇一個適合您需求的產品。可能具有給定精度的浮點版本。現在,如果你擔心因爲那些被命名爲「近似數字」,請注意雙精度數字是一個近似數值,也是用C#(或者你使用的任何其他前端語言 - 你不要告訴我們)。

默認推薦的映射是http://msdn.microsoft.com/en-us/library/ms131092.aspx,並且會指向「浮動」。

+0

我沒有意識到這個「,」只是視覺轉換 - 感謝回答,這對我非常有用:)所以,結論如下: 如果我想將此值(從C#)存儲到數據庫中: 'double x = 52.22105994970536;' 我必須把它放在float類型的列中,對吧?然後,當我在某個函數中從數據庫中讀取這個值時,它會有「。」而不是「,」,是嗎? 問候! – whoah 2012-07-09 11:22:02

+0

不,它不會有「。」也不是「,」,它以二進制格式存儲,沒有任何知識。只有當你將它轉換成一個字符串時纔會出現,但它們根本不是數字的本質。 – TomTom 2012-07-09 11:22:58

+0

好吧,我的意思是讀一些功能,當我需要這個「。」時。進行一些計算。哦,還有最後一個問題。這個SQL查詢能正常工作嗎? ''select * from tableXYZ where lat> ='「+ latUp +」'「',其中」latUp「是doubletype(來自c#),而tableXYZ中的lat是float類型的?問候! – whoah 2012-07-09 11:28:59

0

由於Damien_The_Unbeliever指出格式化(也應該是不相關的)格式化你的顯示器做一些事情,報告等

至於是否使用浮點或固定點(十進制),小數解決了很多問題如果您用來訪問它的語言有十進制類型。如果您將數字操作爲雙精度型,那麼在後端使用小數不會給您太多,因爲您仍然需要手動處理浮點表示的內在不準確性。

+0

好的,謝謝。所以現在是時間問題愚蠢到地獄 - >我可以發送雙類型(點)與浮動類型的列?如果不是,我該怎麼辦,把這個值'52.22105994970536'發送到數據庫中?或者,也許這種解決方案更好? 'float x =(float)52.22105994970536;' – whoah 2012-07-09 11:10:05

+0

默認情況下,Sql Server中的FLOAT具有與您熟悉的編程語言相同的字節寬度(即使您編寫的示例有太多有效數字) – shawnt00 2012-07-09 15:05:00

相關問題