python入門教程(非常詳細(xì)) python小數(shù)點(diǎn)后兩位數(shù)的減法為什么會出現(xiàn)循環(huán)小數(shù)?
python小數(shù)點(diǎn)后兩位數(shù)的減法為什么會出現(xiàn)循環(huán)小數(shù)?首先要說明的是這個現(xiàn)象不僅僅發(fā)生在減法, 凡是涉及到浮點(diǎn)型(float)的基本數(shù)學(xué)計(jì)算都有可能出現(xiàn)你認(rèn)為是錯誤的行為。比如下面這個加法再說原因,
python小數(shù)點(diǎn)后兩位數(shù)的減法為什么會出現(xiàn)循環(huán)小數(shù)?
首先要說明的是這個現(xiàn)象不僅僅發(fā)生在減法, 凡是涉及到浮點(diǎn)型(float)的基本數(shù)學(xué)計(jì)算都有可能出現(xiàn)你認(rèn)為是錯誤的行為。比如下面這個加法
再說原因, 這個主要是由于浮點(diǎn)型數(shù)據(jù)在計(jì)算機(jī)內(nèi)部是以二進(jìn)制形式表示的。而小數(shù)由二進(jìn)制表示往往由于精度的原因?qū)е潞蛯?shí)際表示的值不一致;比如上面的"2.1"在python解釋執(zhí)行時已經(jīng)被表示成內(nèi)部的二進(jìn)制形式,有可能發(fā)生精度的偏移。這樣計(jì)算之后的結(jié)果自然與期望的不一致了。
那么如何要避免這個問題呢?特別是與MONEY/$$$$$$$相關(guān)的計(jì)算的時候:
a. 用decimal 這個數(shù)據(jù)類型進(jìn)行計(jì)算:
b.如果只是想顯示出期望的值,可以用rounding:
>> t = 0.2 0.1
>> print("%0.1f" % t)
===> 0.3
c.可以利用Int類型計(jì)算:
>> (0.2 * 10 2.1 * 10)/10
除法除不斷的數(shù)字為什么要添0打小數(shù)點(diǎn)?
(1)除數(shù)是整數(shù)的小數(shù)的除法
除數(shù)是整數(shù)的小數(shù)除法,可按照以下步驟進(jìn)行計(jì)算:
①先按照整數(shù)除法的法則去除;
②商的小數(shù)點(diǎn)要和被除數(shù)的小數(shù)點(diǎn)對齊;
③除到被除數(shù)的末尾仍有余數(shù)時,就在余數(shù)后面添0,再繼續(xù)除。
(2)除數(shù)是小數(shù)的小數(shù)除法
除數(shù)是小數(shù)的小數(shù)除法,可按照以下步驟進(jìn)行計(jì)算:
①先把除數(shù)的小數(shù)點(diǎn)去掉使它變成整數(shù);
②看除數(shù)原來有幾位小數(shù),就把被除數(shù)小數(shù)點(diǎn)向右移動相同的幾位(位數(shù)不夠時補(bǔ)0);
③按照除數(shù)是整數(shù)的除法進(jìn)行計(jì)算。
(3)取商的近似值
在實(shí)際生活和生產(chǎn)中,常常遇到小數(shù)除法不能除盡或所得的
商的小數(shù)位數(shù)太多,但實(shí)際又不需要,可以根據(jù)要求和具體情況取商的近似值。
除法除不斷的數(shù)字為什么要添0打小數(shù)點(diǎn)?
(1)除數(shù)是整數(shù)的小數(shù)的除法除數(shù)是整數(shù)的小數(shù)除法,可按照以下步驟進(jìn)行計(jì)算:①先按照整數(shù)除法的法則去除;②商的小數(shù)點(diǎn)要和被除數(shù)的小數(shù)點(diǎn)對齊;③除到被除數(shù)的末尾仍有余數(shù)時,就在余數(shù)后面添0,再繼續(xù)除。(2)除數(shù)是小數(shù)的小數(shù)除法除數(shù)是小數(shù)的小數(shù)除法,可按照以下步驟進(jìn)行計(jì)算:①先把除數(shù)的小數(shù)點(diǎn)去掉使它變成整數(shù);②看除數(shù)原來有幾位小數(shù),就把被除數(shù)小數(shù)點(diǎn)向右移動相同的幾位(位數(shù)不夠時補(bǔ)0);③按照除數(shù)是整數(shù)的除法進(jìn)行計(jì)算。(3)取商的近似值在實(shí)際生活和生產(chǎn)中,常常遇到小數(shù)除法不能除盡或所得的商的小數(shù)位數(shù)太多,但實(shí)際又不需要,可以根據(jù)要求和具體情況取商的近似值。