0

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

JavaScript存储10^1001e+101,有没有办法在数据库中做到这一点?这些数字通常不会那么大,但我想用诸如此类的数据进行计算10^-34 * 2^16,所以数据库应该(我认为)将这些存储为数字......

这是如何运作的?您如何存储这种规模的数字,以便您可以使用它们进行计算?

通过“数据库”,我一般都在想。我目前正在玩弄 MongoDB 和 Neo4j。

4

3 回答 3

4

数据库本身不支持原生数字格式的任意大小的数字。您对数字类型的一般上限通常是 8 个字节,这与 googol 相差无几。

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

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

于 2012-06-05T03:05:50.337 回答
2

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

于 2012-06-05T03:03:59.540 回答
2

你可以使用 double 类型。

MySQL DOUBLE[(M,D)]

一个正常大小(双精度)的浮点数。允许的值为 -1.7976931348623157E+308 到 -2.2250738585072014E-308、0 和 2.2250738585072014E-308 到 1.7976931348623157E+308。这些是基于 IEEE 标准的理论限制。根据您的硬件或操作系统,实际范围可能会稍小一些。

于 2012-06-05T03:07:17.930 回答