案例1 :
for num in [.1,.2,.3,.4,.5,.6,.7,.8,.9,]:
print(format(num,".50f"))
0.10000000000000000555111512312578270211815834045410
0.20000000000000001110223024625156540423631668090820
0.29999999999999998889776975374843459576368331909180
0.40000000000000002220446049250313080847263336181641
0.50000000000000000000000000000000000000000000000000
0.59999999999999997779553950749686919152736663818359
0.69999999999999995559107901499373838305473327636719
0.80000000000000004440892098500626161694526672363281
0.90000000000000002220446049250313080847263336181641
精度不高(.5
除外)。
案例2 :
for num in [1.,2.,3.,4.,5.,6.,7.,8.,9.]:
print(format(num,".50f"))
1.00000000000000000000000000000000000000000000000000
2.00000000000000000000000000000000000000000000000000
3.00000000000000000000000000000000000000000000000000
4.00000000000000000000000000000000000000000000000000
5.00000000000000000000000000000000000000000000000000
6.00000000000000000000000000000000000000000000000000
7.00000000000000000000000000000000000000000000000000
8.00000000000000000000000000000000000000000000000000
9.00000000000000000000000000000000000000000000000000
完美的精度-???
众所周知,计算中没有完美的浮点整数:所有浮点都以二进制为基础来表示,精度取决于位大小(float32
,float64
等)。那么,上述案例2的处理方式是什么?即使对于".1000f"
,零也将持续存在,这基本上意味着无限的精度。此外,0.5
也以某种方式完美体现。
如果format
不能强制Python打印浮点数的“ true”值,那怎么办?
尝试的替代方法:
-
format(round(num,50),".50f")
-
format(numpy.float128(num),".50f")
-
format(round(numpy.float128(num),".50f")
-
format("%.50f" % num)
-
"{:.50f}".format(num))
-
f"{num:.50f}"
接受的答案:阐明问题中假定的错误前提;实际问题的答案就在问题本身之内-使用format
显示真实的数值。