【问题标题】:Maximum number of decimals places in machine and DB [closed]机器和数据库中的最大小数位数[关闭]
【发布时间】:2019-09-30 16:42:56
【问题描述】:

1) 对于给定的机器,可以存储在磁盘上的浮点十进制数是否有最大的小数位数?

2)给定的关系数据库管理系统可以使用的最大小数位数吗?

3)假设 C++ 代码使用存储在磁盘上的确切数字,即完整的小数位。如果 C++ 代码输出的结果数字(例如将数字乘以 2),并且小数位数超过了 db 允许的位数,那么 db 如何处理呢?抛出异常还是向上取整到底层硬盘允许的最大位数?

【问题讨论】:

  • 所有这些都取决于您使用的数据库以及您用于连接它的库。
  • 使用 Oracle,您可能会发现数据绑定比 SQL 工作得更好(因为这避免了转换为字符串并返回)。
  • 每个系统和每个数据库都没有一个答案。他们都坚持自己的标准。开始试验您的编译器和数据库。

标签: java c++ sql operating-system


【解决方案1】:

1) 对于给定的机器,可以存储在磁盘上的浮点十进制数是否有最大的小数位数?

通常,浮点数的精度由处理器或浮点处理器决定。

有一些“大数字”库可以扩展浮点数的精度。

因此,磁盘上可以存储的最大小数位数取决于:
1) 磁盘大小。
2)浮点实现的大小(如Big Number库)。

2) 给定的关系数据库管理系统可以使用的最大小数位数是否存在?

是的。每个 RDBMS 都有自己的限制。数据库之间没有标准限制。您必须调查数据库并找出答案。

3)假设 C++ 代码使用存储在磁盘上的确切数字,即完整的小数位。如果 C++ 代码输出的结果数字(例如将数字乘以 2),并且小数位数超过了 db 允许的位数,那么 db 如何处理呢?抛出异常还是向上取整到底层硬盘允许的最大位数?

溢出或容量限制取决于浮点实现(处理器和数据库实现)。有些实现可能会截断,有些可能会舍入;一切都取决于。对于数据库来说,所有的数据库中并没有一个标准来处理精度溢出或容量限制。您必须调查您计划使用的数据库或所有数据库。

还可以在互联网上搜索“IEEE 浮点标准”。

【讨论】:

  • 您可能想在互联网上搜索“计算 PI”,看看他们如何处理具有大量小数精度的数字的存储。
  • 谢谢。通过“Big Number”库,我猜它是操作系统的一部分?
  • 不,Big Number 库不是操作系统的一部分。那里有许多 Big Number 库,例如 GMP。
【解决方案2】:

1) 对于给定的机器,可以存储在磁盘上的浮点十进制数是否有最大的小数位数?

计算机本身不存储小数位。他们维护二进制数字。二进制位数的最大数量取决于进程和所选浮点值的类型。二进制数限制了十进制数的最大位数,该值可以转换为任何含义的两位。

2)给定的关系数据库管理系统可以使用的最大小数位数吗?

计算机上的一切都是有限制的。数据库可以本地存储值,也可以转换为自己的格式。如果本地存储,硬件支持的二进制位数是限制。如果以自己的格式存储,数据库可以选择任意数量的数字。这个数字可能非常大。

3)假设 C++ 代码使用存储在磁盘上的确切数字,即完整的小数位。如果 C++ 代码输出的结果数字(例如将数字乘以 2),并且小数位数超过了 db 允许的位数,那么 db 如何处理呢?抛出异常还是向上取整到底层硬盘允许的最大位数?

乘以 2 只会增加指数。如果指数溢出,您只会得到一个异常。

【讨论】:

    猜你喜欢
    • 2011-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-25
    • 2021-09-06
    • 1970-01-01
    • 2012-09-14
    • 2017-05-11
    相关资源
    最近更新 更多