在 Python 中定义浮点数的精度
Posted
技术标签:
【中文标题】在 Python 中定义浮点数的精度【英文标题】:Defining precision of floating point number in Python 【发布时间】:2012-10-13 19:59:47 【问题描述】:我这里有一些python代码
代码:
t = 1
xt = array([ -1.,-1. ])
xt[0] = theta[0][0]* P_all_States[t-1][0] + theta[1][0]*P_all_States[t-1][1]
xt[1] = theta[0][1]* P_all_States[t-1][0] + theta[1][1]*P_all_States[t-1][1]
P_all_States[t][0] = xt[0]
P_all_States[t][1] = xt[1]
print ("Added probability distribution for time t = " + str(t) + " to P_all_States")
print P_all_States
输出:
将时间 t = 1 的概率分布添加到 P_all_States [[0.6, 0.4], [0.62000000000000011, 0.38000000000000006], [-1.0, -1.0], [-1.0, -1.0], [-1.0, -1.0], [-1.0, -1.0]]
如何将浮点数四舍五入为 2 位有效数字?
这些都是浮点数,所以我不想将它们转换为字符串,我希望它们保持为浮点数
谢谢
【问题讨论】:
相关:Pretty-printing of numpy.array,即np.set_printoptions(precision=2)
【参考方案1】:
我不确定你的意思,但如果你的意思是如何将它们的值修改为 0.62 等:由于它们的性质,浮点数是不可能的。您可以使用小数而不是浮点数来解决此问题。 如果您的意思是如何打印只有 2 位小数的浮点数,请使用:
print ':3.2f'.format(somefloat)
【讨论】:
【参考方案2】:>>> round(0.62000000000000011,2)
0.62
【讨论】:
您应该注意,这实际上不会导致值0.62
。 print decimal.Decimal(round(0.62000000000000011,2))
-> 0.61999999999999999555910790149937383830547332763671875
.【参考方案3】:
要转换整个列表,请将@Zashas 答案与:
rounded = [ [round(a[0],2), round(a[1],2)] for a in P_all_States ]
【讨论】:
它是一个列表的列表,所以上面不会做这项工作,需要类似:rounded = [ [round(a[0],2), round(a[1], 2)] 对于 P_all_States 中的 a ] 对不起 - 没有意识到这一点。好吧,你纠正了它。谢谢!以上是关于在 Python 中定义浮点数的精度的主要内容,如果未能解决你的问题,请参考以下文章