Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 是否有任何命令可以为整个程序设置浮点变量中的小数位数?_Python_Variables_Format - Fatal编程技术网

Python 是否有任何命令可以为整个程序设置浮点变量中的小数位数?

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

如果有人能告诉我是否可以在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(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