如何在数据库(以及其他非常大的数字)中存储googol?

时间:2012-06-05 02:57:46

标签: javascript database numbers

如何有效地存储从10^-10010^100的非常大和非常小的数字,以便您可以使用它们来编写JavaScript等编程语言中的值。

JavaScript将10^100存储为1e+101,有没有办法在数据库中执行此操作?这些数字通常不会那么大,但我想用10^-34 * 2^16等数据进行计算,所以数据库应该(我认为)将它们存储为数字......

这是如何工作的?你如何存储这种规模的数量,以便你可以用它们运行计算?

通过“数据库”,我在思考。我目前正在搞乱MongoDB和Neo4j。

3 个答案:

答案 0 :(得分:4)

数据库本身不支持本机数字格式的任意大小的数字。数字类型的一般上限通常是8个字节,而不是googol附近的任何地方。

您必须将数字存储为字符串(效率最低,最易于使用,可以根据需要精确),作为任意长度的字节数组(更高效,更难处理,仍然是任意的)精度),或科学记数法(效率最高,难以使用,精度有限)。

不幸的是,前两个确实消除了进行任何服务器端计算的可能性,因为不存在可以支持有效值范围的本机数字类型。所有的计算都必须使用合适的数字类型在客户端完成。

答案 1 :(得分:2)

如果我是你,我会将数值与指数分开。我个人没有使用MongoDB或Neo4j的经验,但是在MySQL中(我确定它们有相似的术语)我将创建一个带有VARCHAR(文本)列的表,其中包含您在程序中的任何精度(或者多少个唯一数字)和另一个长度为3的VARCHAR列(最大指数为999)。您可以根据需要修改价值观,但这是我能想到的。如果你想要更灵活的大小值,我会使用PHP而不是使用数据库将数字存储在服​​务器的文件系统上。

答案 2 :(得分:2)

您可以使用双重类型。

The MySQL DOUBLE[(M,D)]

  

正常大小(双精度)浮点数。可允许的   值为-1.7976931348623157E + 308至-2.2250738585072014E-308,0,   和2.2250738585072014E-308至1.7976931348623157E + 308。这些是   理论极限,基于IEEE标准。实际范围可能   稍微小一些,具体取决于您的硬件或操作系统。