Python中的双精度浮点值?

Python中的双精度浮点值?,python,types,precision,Python,Types,Precision,有比float更精确的数据类型吗?Python内置的float类型具有双精度(在CPython中是Cdouble,在Jython中是Javadouble)。如果需要更高的精度,请获取并使用其numpy.float128 与基于硬件的二进制浮点不同,十进制模块具有用户可更改的精度(默认为28位),可以根据给定问题的需要进行调整 如果您被性能问题所困扰,请查看您是否需要十进制 >>> from decimal import Decimal >>> De

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

Python内置的
float
类型具有双精度(在CPython中是C
double
,在Jython中是Java
double
)。如果需要更高的精度,请获取并使用其
numpy.float128

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

如果您被性能问题所困扰,请查看您是否需要十进制

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

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

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

(对于其他应用程序,正如其他响应所建议的那样,存在。)

这是我的解决方案。我首先使用random.uniform创建随机数,将它们格式化为具有双精度的字符串,然后将它们转换回float。您可以通过将“.2f”更改为“.3f”等来调整精度

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)

如何在小数和小数之间进行选择?分数似乎更好,因为它可以代表连续的分数,我猜小数不能。“JANUS:考虑你的要求,选择一个更适合他们。如果要使用具有固定(但可配置)精度的近似数字,请使用
Decimal
。当您想使用精确的比率,并准备好忍受其无限的存储需求时,请使用
france
。france是否支持您可以使用float执行的所有操作?很好。双精度是指变量的双长度二进制表示法,而不是浮点的二进制表示法。不是小数点后两位,你是对的。当我自己遇到这个问题时,我可能使用了错误的搜索条件,这就是结果。其他一些人可能会像我一样搜索同一个问题,并在这里结束。希望他们能找到一些解脱。:)这是我能想到的最糟糕的将浮点四舍五入到小数点后两位的方法。你至少应该使用
numpy.floor(100*a)/100
将一个数字
a
截断到小数点后两位。如果我问的是原来的问题,那么@larsmans's将是答案(尽管在形式上它是离题的)。@PiotrFindeisen这个答案在哪里?不知道,但现在我要提到@FredFoo。通常是“Python中的双精度浮点值?”→ “
float
-s是双精度”显然,
numpy.float128
在64位系统上通常具有64位精度
numpy.float128(1)+numpy.float128(2**-64)-numpy.float128(1)
返回
0.0
。在python中,0.1+0.2并不完全是0.3,在其他语言中,这是一个浮点问题,但从来不是双重问题。为什么它在python中不是精确的0.3?@FuscaSoftware在其他语言中也是一个问题。IEEE Double不能精确表示0.3。这听起来像是一个格式化工件。这实际上是两个答案不同的问题。1:python中的双精度值是浮点数,2:比浮点数精度更好的数据类型是十进制。像这样的问题能以某种方式分开吗?被接受的答案地址为2,但多数被高估的答案地址为1。