Python 是否有任何命令可以为整个程序设置浮点变量中的小数位数?
如果有人能告诉我是否可以在Python中明确设置浮点变量的精度,我将不胜感激。我指的是MATLAB中的长/短格式函数。谢谢大家! 请举个例子Python 是否有任何命令可以为整个程序设置浮点变量中的小数位数?,python,variables,format,Python,Variables,Format,如果有人能告诉我是否可以在Python中明确设置浮点变量的精度,我将不胜感激。我指的是MATLAB中的长/短格式函数。谢谢大家! 请举个例子 import numpy as np from matplotlib import pyplot as plt from mayavi import mlab import matplotlib.cm as cm from matplotlib import animation from decimal import * setcontext(prog
import numpy as np
from matplotlib import pyplot as plt
from mayavi import mlab
import matplotlib.cm as cm
from matplotlib import animation
from decimal import *
setcontext(program_context)
program_context = Context(prec=4, rounding=ROUND_UP)
a=.1
dt=.1
nx=31
ny=31
p=6
x = np.linspace(-p,p,nx)
y = np.linspace(-p,p,ny)
qx=2.0*p/(nx-1)
qy=2.0*p/(ny-1)
ax.set_xlim(-p,p)
ax.set_ylim(-p,p)
X,Y = np.meshgrid(x,y)
U=-a*Y
V=a*X
xp = np.empty(11)
yp = np.empty(11)
xp[0]=2
yp[0]=2
for i in range(10):
xp[i+1]=xp[i]+dt*U[i+(2+p)/qx,i+(2+p)/qy]
yp[i+1]=yp[i]+dt*V[i+(2+p)/qx,i+(2+p)/qy]
print (xp[i], yp[i])
我获得以下资料:
(2.0, 2.0)
(1.98, 2.02)
(1.956, 2.044)
(1.9279999999999999, 2.0720000000000001)
(1.8959999999999999, 2.1040000000000001)
(1.8599999999999999, 2.1400000000000001)
(1.8199999999999998, 2.1800000000000002)
(1.7759999999999998, 2.2240000000000002)
(1.7279999999999998, 2.2720000000000002)
(1.6759999999999997, 2.3240000000000003)
是否可以只获得小数部分的4个数字?谢谢你的帮助!
Strömungsmechanik如果您想在Python程序中控制数字的精度,您需要考虑使用
十进制
数字,而不是浮点数。要控制decimal.decimal
数字的精度,必须定义decimal.Context
对象,然后使用decimal.setcontext
函数激活它。一旦上下文被激活,它将控制特定线程中的所有decimal.decimal
数字,除非它被新的decimal.context
特别覆盖
补充:numpy似乎不能很好地处理十进制数字numpy.around
可能更合适,尽管我从未使用过它。有关更多详细信息,请参阅此答案:
如果您想在Python程序中控制数字的精度,您需要考虑使用
十进制
数字,而不是浮点数。要控制decimal.decimal
数字的精度,必须定义decimal.Context
对象,然后使用decimal.setcontext
函数激活它。一旦上下文被激活,它将控制特定线程中的所有decimal.decimal
数字,除非它被新的decimal.context
特别覆盖
补充:numpy似乎不能很好地处理十进制数字numpy.around
可能更合适,尽管我从未使用过它。有关更多详细信息,请参阅此答案:
不,你不能。Python浮点不允许自定义字符串表示 它们总是表示为
double
s。格式化它们的唯一方法是显式使用格式字符串(如“{.4f}”.format(1.23456789)
或“%.4f”%1.23456789
)
在纯python中,您可以使用允许您为浮点设置任意精度的模块。
可以使用设置精度
然而,在这种浮动上的操作可能会非常慢
如果您使用的是交互式解释器,它确实提供了一种%精度
魔法,您可以使用它设置浮点数的打印方式:
In [1]: %precision %.4f
Out[1]: '%.4f'
In [2]: 1.2345678
Out[2]: 1.2346
In [3]: %precision %.10f
Out[3]: '%.10f'
In [4]: 1.123456789
Out[4]: 1.1234567890
(见相关问题)
但是,如果您使用的是numpy
,您可能会这样做,因为它可以提供类似MATLAB的环境,您可以使用设置其数字的精度
例如:
>>> import numpy as np
>>> np.set_printoptions(precision=6)
>>> np.array([1, 2.123456, 3.123456789])
array([ 1. , 2.123456, 3.123457])
>>> np.set_printoptions(precision=10)
>>> np.array([1, 2.123456, 3.123456789])
array([ 1. , 2.123456 , 3.123456789])
请注意,您可以提供自定义浮点格式设置程序来实现您喜欢的任何表示形式
(但是请注意,这只会更改数字的显示方式,而不会更改用于表示数字的位数。为此,请指定数组的
dtype
。不可以。Python浮点不允许自定义字符串表示
它们总是表示为double
s。格式化它们的唯一方法是显式使用格式字符串(如“{.4f}”.format(1.23456789)
或“%.4f”%1.23456789
)
在纯python中,您可以使用允许您为浮点设置任意精度的模块。
可以使用设置精度
然而,在这种浮动上的操作可能会非常慢
如果您使用的是交互式解释器,它确实提供了一种%精度
魔法,您可以使用它设置浮点数的打印方式:
In [1]: %precision %.4f
Out[1]: '%.4f'
In [2]: 1.2345678
Out[2]: 1.2346
In [3]: %precision %.10f
Out[3]: '%.10f'
In [4]: 1.123456789
Out[4]: 1.1234567890
(见相关问题)
但是,如果您使用的是numpy
,您可能会这样做,因为它可以提供类似MATLAB的环境,您可以使用设置其数字的精度
例如:
>>> import numpy as np
>>> np.set_printoptions(precision=6)
>>> np.array([1, 2.123456, 3.123456789])
array([ 1. , 2.123456, 3.123457])
>>> np.set_printoptions(precision=10)
>>> np.array([1, 2.123456, 3.123456789])
array([ 1. , 2.123456 , 3.123456789])
请注意,您可以提供自定义浮点格式设置程序来实现您喜欢的任何表示形式
(但是请注意,这只会更改数字的显示方式,而不会更改用于表示数字的位数。为此,请指定数组的
dtype
。您可能需要阅读以下内容:谢谢Tobias。我想要的是比每次需要特定格式时通过命令decimal强制使用格式更实用的东西。我可以把整个程序的格式设置得像在MATLAB中一样短吗?谢谢大家!setcontext(program\u context)
必须在声明program\u context
之后,而不是之前。即使我们把它放在后面,它也不会改变任何东西!我认为给每个变量加上小数太麻烦了!再次感谢您的帮助!:)@Strömungsemachik:同意必须将每个变量声明为十进制是很麻烦的。看看numpy的around
函数和我下面链接的SO答案,这可能有用,但我对numpy的了解还不够确定。你可能想读一下:谢谢Tobias。我想要的是比每次需要特定格式时通过命令decimal强制使用格式更实用的东西。我可以把整个程序的格式设置得像在MATLAB中一样短吗?谢谢大家!setcontext(program\u context)
必须在声明program\u context
之后,而不是之前。即使我们把它放在后面,它也不会改变任何东西!我认为给每个变量加上小数太麻烦了!再次感谢您的帮助!:)@Strömungsemachik:同意必须将每个变量声明为十进制是很麻烦的。看一看numpy的around
函数和我下面链接到的SO答案,这可能有用,但我对numpy的了解还不够确定。谢谢Superjump。但是我在你提到的网站上找不到想要的功能。我想要一个函数,允许显示4位小数的变量,而不是更多。你能帮我吗?@Strömungsmec