Java double 和 Oracle float 转换为 SQL Server numeric

发布于 2024-12-11 08:05:56 字数 518 浏览 0 评论 0原文

我正在开发 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) 对于 doublefloat(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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

一杆小烟枪 2024-12-18 08:05:56

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's double, 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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文