Python 中的双精度浮点值?

是否有比 float 更精确的数据类型?

416753 次浏览

Python 的内置 float类型具有双精度(CPython 中是 C double,Jython 中是 Java double)。如果需要更高的精度,可以得到 笨蛋并使用它的 numpy.float128

十进制数据类型

  • 与基于硬件的二进制浮点数不同,十进制模块具有用户可更改的精度(默认为28位) ,该精度可以根据给定问题的需要尽可能大。

If you are pressed by performance issuses, have a look at GMPY

也许你需要十进制

>>> from decimal import Decimal
>>> Decimal(2.675)
Decimal('2.67499999999999982236431605997495353221893310546875')

浮点运算

对于某些应用程序,您可以使用 Fraction代替浮点数。

>>> from fractions import Fraction
>>> Fraction(1, 3**54)
Fraction(1, 58149737003040059690390169)

(对于其他应用程序,也有 decimal,正如其他回复所建议的那样。)

这是我的解决办法。我首先创建了一个随机数,它的格式是双精度的字符串,然后将它们转换回 float。您可以通过将’.2 f’改为’.3 f’等来调整精度。.

import random
from decimal import Decimal


GndSpeedHigh = float(format(Decimal(random.uniform(5, 25)), '.2f'))
GndSpeedLow = float(format(Decimal(random.uniform(2, GndSpeedHigh)), '.2f'))
GndSpeedMean = float(Decimal(format(GndSpeedHigh + GndSpeedLow) / 2, '.2f')))
print(GndSpeedMean)