Java double 和 Oracle float 转换为 SQL Server numeric
我正在开发 SQL Server 数据库,需要确保数字类型对于数据来说足够大。
有两个来源:Java double
和 Oracle float(126)
。
SQL Server 类型为numeric(30,10)
或numeric(15,8)
。
我读到Java双精度可以存储从-4.9E-324到1.7976931348623157E+308的值,Oracle float(126)
具有大约38位精度,而SQL Server numeric(30,10 )
的精度只有 30 位,小数点后允许保留 10 位。
我是否正确地说 numeric(30,10)
对于 double
和 float(126)
并不安全,并且可能导致精度损失或溢出。是否应该将其更改为DOUBLE PRECISION
?
I'm working on a SQL Server database and need to make sure the numeric types are large enough for the data.
There are two sources: Java double
and Oracle float(126)
.
The SQL Server types are either numeric(30,10)
or numeric(15,8)
.
I read that Java doubles can store values from -4.9E-324 to 1.7976931348623157E+308, Oracle float(126)
has approximately 38 digits of precision, while SQL Server numeric(30,10)
has only 30 digits of precision and allows 10 digits after the decimal point.
Am I correct in saying that numeric(30,10)
is not safe for double
and float(126)
and could lead to loss of precision or overflow. Should these be changed to DOUBLE PRECISION
?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
SQL 的
NUMERIC
是一种十进制类型。DOUBLE PRECISION
是一种二进制浮点类型,通常映射到 IEEE 754 双精度(64 位),这正是 Java 的double
使用的格式,因此这应该是一个完美的匹配。FLOAT
也是 SQL 标准中存在的二进制类型,因此它也应该存在于 SQL Server 上,但其最大精度取决于实现,如果它在 SQL Server 上较小,则实际上没有任何东西你可以做的。SQL's
NUMERIC
is a decimal type.DOUBLE PRECISION
is a binary float type, typically mapped to IEEE 754 douple precision (64 bits), which is exactly the format used by Java'sdouble
, so that should be a perfect match.FLOAT
is also a binary type present in the SQL standard, so it should also be present on SQL Server, but its maximum precision is implementation dependant, and if it's smaller on SQL Server there isn't really anything you can do.