2011-10-21 50 views
0

我正在研究SQL Server數據庫,並且需要確保數字類型對於數據足夠大。Java雙重和Oracle浮動到SQL Server數字

有兩個來源:Java double和Oracle float(126)

SQL Server類型是numeric(30,10)numeric(15,8)

我讀到雙打的Java可從存儲值-4.9E-324到1.7976931348623157E + 308,甲骨文float(126)具有約38的精度位數,在SQL Server numeric(30,10)僅具有30位的精度,並允許10個數字的十進制後點。

我是否正確地說numeric(30,10)對於doublefloat(126)不安全,可能會導致精度或溢出的丟失。這些應該改爲DOUBLE PRECISION

回答

2

SQL的NUMERIC十進制類型。 DOUBLE PRECISION是一種二進制浮點類型,通常映射到IEEE 754雙精度(64位),這正是Java的double使用的格式,因此應該是完美匹配。 FLOAT也是SQL標準中存在的二進制類型,所以它也應該存在於SQL Server上,但其最大精度取決於實現,如果它在SQL Server上較小,則無法執行任何操作。

+0

根據[microsoft docs](http://msdn.microsoft.com/en-us/library/ms173773.aspx),可以設置的最高值是1.79E + 308,與OP的要求相匹配。奇怪的是,下界似乎不同意,這是我預料不到的。 –

+0

@Damien_The_Unbeliever:這是64位浮點的範圍。如果Oracle允許FLOAT(126),其範圍必須大得多。下限不同,因爲其中列出了最小的「常規」值,而另一個是最小的非規格化值。 –