如何在python、django和mysql模型中处理大量数据?

如何在python、django和mysql模型中处理大量数据?,python,mysql,django,django-models,floating-point,Python,Mysql,Django,Django Models,Floating Point,如何处理mysql数据类型的python和django模型中的大量数据? 我想存储大的十进制数,例如太阳的质量,单位为kg 1.98847±0.00007×10^30千克 以及其他大量的物理学和天文学 我需要的最大位数和小数位数是多少 对于简单的经度,我使用11,6: models.DecimalField(max_digits=11, decimal_places=6, null=False) >>> s = 1.9884723476542349808764 >&g

如何处理mysql数据类型的python和django模型中的大量数据? 我想存储大的十进制数,例如太阳的质量,单位为kg 1.98847±0.00007×10^30千克 以及其他大量的物理学和天文学

我需要的最大位数和小数位数是多少

对于简单的经度,我使用11,6:

models.DecimalField(max_digits=11, decimal_places=6, null=False)


>>> s = 1.9884723476542349808764
>>> s
1.988472347654235
>>>

>>> c = 9.961558465069068e-35
>>> c
9.961558465069068e-35
>>> Decimal(c)
Decimal('9.9615584650690682798407470173147606387909020112701851758062095613274216457861081111717165524621631078616701415739953517913818359375E-35')
>>>
您应该使用浮动,而不是浮动:

十进制是一种可以以任意精度工作的数字类型。如果使用DecimalField,则还将提供十进制值。但是,如果您将浮点写入该小数字段,则由于浮点尾数有限,可能会出现舍入错误。

您应该使用浮点,而不是浮点:


十进制是一种可以以任意精度工作的数字类型。如果使用DecimalField,则还将提供十进制值。但是,如果将浮点写入该十进制字段,则由于浮点尾数有限,可能会出现舍入错误。

不应首先使用浮点,然后将其转换为十进制,因为这样,精度当然会丢失。您应该直接使用小数。@WillemVanOnsem对于像9.961558465069069068E-35这样的巨数,我使用的最大位数和小数位数是多少?因为我必须将其放入mysql数据库中。在这种情况下,您需要像max_digits=51和decimal_places=51这样的内容。因此,它将以10e-51的分辨率表示0和1之间的值。@WillemVanOnsem为什么是51?你是如何得出51的?因为你的数字中有16位数字,位于逗号后35位,所以16+35=51。你不应该先使用浮点数,然后再将其转换为十进制,因为那样的话,精度当然会丢失。您应该直接使用小数。@WillemVanOnsem对于像9.961558465069069068E-35这样的巨数,我使用的最大位数和小数位数是多少?因为我必须将其放入mysql数据库中。在这种情况下,您需要像max_digits=51和decimal_places=51这样的内容。因此,它将以10e-51的分辨率表示0和1之间的值。@WillemVanOnsem为什么是51?你是怎么得到51的?因为你的数字中有16位数字,在逗号后有35位,所以16+35=51。
from decimal import Decimal

s = Decimal('1.9884723476542349808764')
>>> Decimal('1.9884723476542349808764')
Decimal('1.9884723476542349808764')
>>> Decimal('1.9884723476542349808764') * 3
Decimal('5.9654170429627049426292')