Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在数据库中存储googol(以及其他非常大的数字)?_Javascript_Database_Numbers - Fatal编程技术网

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

Javascript 如何在数据库中存储googol(以及其他非常大的数字)?,javascript,database,numbers,Javascript,Database,Numbers,如何有效地存储从10^-100到10^-100的非常大和非常小的数字,以便您可以使用它们来计算JavaScript等编程语言中的值 JavaScript将10^100存储为1e+101,有没有办法在数据库中这样做?数字通常不会那么大,但我想用10^-34*2^16之类的数据进行计算,所以我认为数据库应该将这些数据存储为数字 这是怎么回事?如何存储这种比例的数字,以便可以使用它们进行计算 根据数据库,我的想法是一般的。我现在正在和MongoDB和Neo4j混在一起。如果我是你,我会把数值和指数分开

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

JavaScript将10^100存储为1e+101,有没有办法在数据库中这样做?数字通常不会那么大,但我想用10^-34*2^16之类的数据进行计算,所以我认为数据库应该将这些数据存储为数字

这是怎么回事?如何存储这种比例的数字,以便可以使用它们进行计算


根据数据库,我的想法是一般的。我现在正在和MongoDB和Neo4j混在一起。

如果我是你,我会把数值和指数分开。我个人没有使用MongoDB或Neo4j的经验,但在MySQL中,我确信它们有类似的术语。我会创建一个表,其中包含一个VARCHAR文本列,该列的精度在程序中可以达到,或者有多少唯一的数字,另一个VARCHAR列的长度为3,表示最大指数999。你可以在你认为合适的时候修改这些价值观,但这就是我所能想到的。如果您想要更灵活的大小值,我会使用PHP将数字存储在服务器的文件系统中,而不是使用数据库。

数据库本身不支持本机数字格式的任意大小的数字。数字类型的一般上限通常为8字节,这与googol不太接近

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


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

您可以使用双精度类型

正常大小的双精度浮点数。允许的 数值为-1.7976931348623157E+308至-2.2250738585072014E-308,0, 和2.2250738585072014E-308至1.7976931348623157E+308。这些是 理论极限,基于IEEE标准。实际的射程可能是 根据您的硬件或操作系统的不同,可以稍微小一些


对于较大的数字,请将其存储为字符串。有很多javascript库用于大数,比如整数。为什么说科学记数法的精度有限?你当然可以储存1.2345个数字89E1000SomeBigNumber00042。如果你真的需要这样的精度,空间效率就不太高了。不过一般来说,如果你测量的东西只有一个谷歌的数量级,你就不会太在意1的位置了。因为这是真的。显然,科学记数法本身可以以任意精度存储数字,但其要点是用较小的数字提供大数字的近似值。这是有损压缩。尺寸、精度、范围;你可以选两个。也许OP不需要那么高的精度,在这种情况下,科学记数法肯定是合适的。我不知道,这就是为什么我在回答中这么说的原因。你是说科学符号的某种特定的机器表示,还是一般的符号?一般来说,表示法允许1到10之间任意精度的数字加上任意指数。@EricJ:机器表示法,因为这是相关点。如果数据库不能存储任意大的数字,那么科学记数法也不例外。MongoDB或Neo4j是否有本机的科学记数法格式?虽然这似乎是一个很好的方法,但您基本上需要重新实现整个浮点标准。我相信,无论是谁编写了底层编程语言/算术库,在这方面都比你我强得多。是的。。。说得好。现在回想起来,这可能需要比我说的更多的工作。更多的工作可能是今年的轻描淡写。对于可定制的精度十进制算法有一个标准,它既不简单也不容易