【问题标题】:Java double and Oracle float into SQL Server numericJava double 和 Oracle 浮动到 SQL Server 数字
【发布时间】:2011-10-21 11:59:41
【问题描述】:

我正在开发一个 SQL Server 数据库,需要确保数字类型对于数据来说足够大。

有两个来源:Java double 和 Oracle float(126)

SQL Server 类型为numeric(30,10)numeric(15,8)

我读到 Java doubles 可以存储从 -4.9E-324 到 1.7976931348623157E+308 的值,Oracle float(126) 大约有 38 位精度,而 SQL Server numeric(30,10) 只有 30 位精度并允许 10 位小数点后。

我是否正确地说numeric(30,10)doublefloat(126) 不安全,并且可能导致精度损失或溢出。是否应该将这些更改为DOUBLE PRECISION

【问题讨论】:

    标签: sql-server floating-point sqldatatypes


    【解决方案1】:

    SQL 的NUMERIC 是一个十进制 类型。 DOUBLE PRECISION 是二进制浮点类型,通常映射到 IEEE 754 双精度(64 位),这正是 Java 的 double 使用的格式,因此应该是完美匹配。 FLOAT 也是 SQL 标准中存在的二进制类型,因此它也应该存在于 SQL Server 上,但它的最大精度取决于实现,如果它在 SQL Server 上更小,那么你真的无能为力。

    【讨论】:

    • 根据microsoft docs,可以设置的最大值是1.79E+308,符合OPs的要求。奇怪的是,下界似乎不同意,这是我没有预料到的。
    • @Damien_The_Unbeliever :这是 64 位浮点数的范围。如果 Oracle 允许 FLOAT(126),它的范围必须大很多。下界不同,因为一个列出了最小的“常规”值,而另一个列出了最小的非规范化值。
    猜你喜欢
    • 2013-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-08
    • 1970-01-01
    相关资源
    最近更新 更多