如何有效地存储从10^-100
到10^100
的非常大和非常小的数字,以便您可以使用它们来编写JavaScript等编程语言中的值。
JavaScript将10^100
存储为1e+101
,有没有办法在数据库中执行此操作?这些数字通常不会那么大,但我想用10^-34 * 2^16
等数据进行计算,所以数据库应该(我认为)将它们存储为数字......
这是如何工作的?你如何存储这种规模的数量,以便你可以用它们运行计算?
通过“数据库”,我在思考。我目前正在搞乱MongoDB和Neo4j。
答案 0 :(得分:4)
数据库本身不支持本机数字格式的任意大小的数字。数字类型的一般上限通常是8个字节,而不是googol附近的任何地方。
您必须将数字存储为字符串(效率最低,最易于使用,可以根据需要精确),作为任意长度的字节数组(更高效,更难处理,仍然是任意的)精度),或科学记数法(效率最高,难以使用,精度有限)。
不幸的是,前两个确实消除了进行任何服务器端计算的可能性,因为不存在可以支持有效值范围的本机数字类型。所有的计算都必须使用合适的数字类型在客户端完成。
答案 1 :(得分:2)
如果我是你,我会将数值与指数分开。我个人没有使用MongoDB或Neo4j的经验,但是在MySQL中(我确定它们有相似的术语)我将创建一个带有VARCHAR(文本)列的表,其中包含您在程序中的任何精度(或者多少个唯一数字)和另一个长度为3的VARCHAR列(最大指数为999)。您可以根据需要修改价值观,但这是我能想到的。如果你想要更灵活的大小值,我会使用PHP而不是使用数据库将数字存储在服务器的文件系统上。
答案 2 :(得分:2)
您可以使用双重类型。
正常大小(双精度)浮点数。可允许的 值为-1.7976931348623157E + 308至-2.2250738585072014E-308,0, 和2.2250738585072014E-308至1.7976931348623157E + 308。这些是 理论极限,基于IEEE标准。实际范围可能 稍微小一些,具体取决于您的硬件或操作系统。