1
親愛的Python社區,numpy的陣列四捨五入不工作
我想數據點之間插值,但想保持我的結果到3位小數,所以我定義了以下功能:
import numpy
def spline(y, x , xnew):
from scipy import interpolate
model = interpolate.splrep(x,y)
ynew = interpolate.splev(xnew,model)
result = ynew.round(3)
return result
這似乎給我下面的簡單示例預期的結果:
x = [1,2,3,4,5,7,10]
y = [1.31,1.883,2.285,2.572,2.809,3.024,3.208]
z = spline(y,x, np.arange(1,11))
其產生預期:
Out[109]:
array([ 1.31 , 1.883, 2.285, 2.572, 2.809, 2.954, 3.024, 3.062,
3.109, 3.208])
但是,當我試圖檢索一個特定的值時,它似乎不是四捨五入。我該如何解決這個問題?下面我
z[3]
Out[110]: 2.5720000000000001
答案如下嘗試:
t= 2.572
t
Out[119]: 2.572
type(t)
Out[120]: float
,所以我不明白爲什麼現在它可以有完全2.572或者是有一個隱含的3位小數在我的T的高清顯示性能?
即已知的任何行爲編程語言。發生這種情況是因爲十進制數字2.572的確切表示需要無限數字的二進制數字 – nanojohn
因此,'2.5720000000000001'最接近'2.572',可以用Python'float'表示。 – JohanL
你的實際用例是什麼?你真的需要它精確到三位小數嗎?那麼你應該考慮使用'Decimal'類。 – JohanL