我正在编写一个python代码,需要将数字评估到很多小数位 - 大约14或15位。
我希望结果能够顺利增加,例如:
0.123456789101997
0.123456789101998
0.123456789101999
0.123456789102000
0.123456789102001
但我似乎只是将数字(当我打印出来时)到12位小数,所以我的数字实际上是跳跃的步骤:
0.123456789101
0.123456789101
0.123456789101
0.123456789102
0.123456789102
起初,我假设这个数字在幕后被列为更多的小数位,但是只打印到12,但是当我打印结果时,它们似乎也是按步骤绘制,而不是顺利。
如果有人能指出我正确的方向来解决这个问题,我真的很感激 - 谢谢。
答案 0 :(得分:8)
使用repr()
,print
使用str()
将十进制数字减少为12,以使输出用户友好。
In [17]: a=0.123456789101997
In [18]: str(a)
Out[18]: '0.123456789102'
In [19]: repr(a)
Out[19]: '0.123456789101997'
或字符串格式:
In [21]: "{0:.15f}".format(a)
Out[21]: '0.123456789101997'
答案 1 :(得分:7)
尝试使用Decimal模块怎么样?
In [2]: import decimal
In [3]: d = decimal.Decimal('0.123456789101997')
In [4]: print d
0.123456789101997
答案 2 :(得分:3)
如前面的答案所示,您可以通过decimal模块使用十进制数字,或者在打印浮点值时可以指定15个小数位,以覆盖默认的12个位置。
在许多Python实现中,普通浮点数是IEEE 754兼容的(1,2)“binary64”双精度数,因此它们的尾数中实际有53位。由于53*math.log(2)/math.log(10)
大约是15.95,所以binary64数字支持超过15个十进制数字的精度,但不是16。
以下是您可以尝试的示例,其输出显示为:
u=1e-15
v=0.123456789101997
for k in range(13):print '{:20.15f}'.format(v+k*u)
0.123456789101997
0.123456789101998
0.123456789101999
0.123456789102000
0.123456789102001
0.123456789102002
0.123456789102003
0.123456789102004
0.123456789102005
0.123456789102006
0.123456789102007
0.123456789102008
0.123456789102009
答案 3 :(得分:2)
您可以选择使用模块decimal来实现此目的。
您需要导入模块。
>>> from decimal import *
然后,您需要通过调用getcontext()函数指定所需的小数点数。以下代码要求25个小数点。
>>> getcontext().prec = 25
然后,您需要指定算术。以下代码确定pi的值,最多25个小数点。
>>> Decimal(22) / Decimal(7)
输出
>>> Decimal('3.142857142857142857142857')
答案 4 :(得分:1)
您可以使用Decimal来获得更好的精确度。
答案 5 :(得分:0)
要显示更多小数点,请将其添加到代码末尾:
print('%.60f' % value_x)
“。60”表示要显示的小数点后60位,“ value_x”表示要显示的任何值。
除了默认输出(以科学计数法表示)之外,我还需要将P值输出为实际的十进制数时,会使用此值。
示例:
In [1]: pearson_coef, p_value = stats.pearsonr(df['horsepower'], df['price'])
In [2]: print("The Pearson Correlation Coefficient is", pearson_coef, " with a P-value of P = ", p_value, "or ")
In [3]: print('%.50f' % p_value)
Out [4]: The Pearson Correlation Coefficient is 0.8095745670036559 with a P-value of P = 6.369057428260101e-48 or 0.00000000000000000000000000000000000000000000000637
答案 6 :(得分:-2)
x=56.0
print("{:.2f}".format(x))
如果执行此代码,我们将获得-
输出: 56.00