溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Python中的數(shù)據(jù)精度問題怎么解決

發(fā)布時(shí)間:2022-10-17 10:43:42 來源:億速云 閱讀:350 作者:iii 欄目:開發(fā)技術(shù)

這篇文章主要介紹了Python中的數(shù)據(jù)精度問題怎么解決的相關(guān)知識(shí),內(nèi)容詳細(xì)易懂,操作簡(jiǎn)單快捷,具有一定借鑒價(jià)值,相信大家閱讀完這篇Python中的數(shù)據(jù)精度問題怎么解決文章都會(huì)有所收獲,下面我們一起來看看吧。

一、python運(yùn)算時(shí)精度問題

1.運(yùn)行時(shí)精度問題

在Python中(其他語(yǔ)言中也存在這個(gè)問題,這是計(jì)算機(jī)采用二進(jìn)制導(dǎo)致的),有時(shí)候由于二進(jìn)制和十進(jìn)制之間對(duì)應(yīng)問題會(huì)導(dǎo)致數(shù)值的精度問題,比如無法用有限個(gè)二進(jìn)制位完整地表示0.1,因?yàn)?.1轉(zhuǎn)化為二進(jìn)制之后位一個(gè)無限循環(huán)小數(shù)

print(1.1*2.2)

查看運(yùn)行結(jié)果:

Python中的數(shù)據(jù)精度問題怎么解決

2.解決方案:添加方法

需要將整數(shù)部分與小數(shù)部分單獨(dú)做處理可以解決

def multiple(m1, m2):
    r=''
    ## 若存在浮點(diǎn)型,則先轉(zhuǎn)化為整數(shù)
    if type( m1 )==float or type( m2 )==float:
        print( "存在浮點(diǎn)數(shù)" )
        len_m1=len( str( m1 ).split( "." )[1] )
        len_m2=len( str( m2 ).split( "." )[1] )
        print( "m1的小數(shù)位:", len_m1 )
        print( "m2的小數(shù)位:", len_m2 )

        m1=int( 10**len_m1*m1 )
        m2=int( 10**len_m2*m2 )
        print( "m1化為整數(shù):", m1 )
        print( "m2化為整數(shù):", m2 )
        r=str( m1*m2 )
        print( "r:", r )

        l=len_m1+len_m2
        print( "l的總長(zhǎng)度:", l )
        if l<len( r ):
            r_front=r[:-l]
            r_last=r[-l:]
            print( r_front, "-", r_last )
            r=r_front+"."+r_last
        else:
            r="0."+(l-len( r ))*"0"+r

    else:
        print( "不存在浮點(diǎn)數(shù)" )
        r=m1*m2
    return r

res = multiple(1.1,2.2)
print(res)

查看運(yùn)行結(jié)果:

Python中的數(shù)據(jù)精度問題怎么解決

二、python四舍五入時(shí)精度問題

1.使用round與浮點(diǎn)數(shù)格式化時(shí)候的精度問題

歸根結(jié)底是計(jì)算機(jī)存儲(chǔ)浮點(diǎn)數(shù)的問題

a1 = 0.235
a2 = round(a1,2)
a3 = '%.2f' % a1
print(a2)
print(a3)

查看運(yùn)行結(jié)果:

Python中的數(shù)據(jù)精度問題怎么解決

 2.解決方案,使用Decimal函數(shù)

需要將float轉(zhuǎn)換為Decimal,該類可以通過接受字符串(務(wù)必是字符串)形式的浮點(diǎn)數(shù)實(shí)現(xiàn)相對(duì)精確的小數(shù)計(jì)算(減緩了精度誤差,但沒有消滅)

from decimal import Decimal

a1 = 0.235
a2 = Decimal(str(a1)).quantize(Decimal("0.00"))
a3 = '{:.2f}'.format(Decimal(str(a1)))
print(a2)
print(a3)

查看運(yùn)行結(jié)果:

Python中的數(shù)據(jù)精度問題怎么解決

關(guān)于“Python中的數(shù)據(jù)精度問題怎么解決”這篇文章的內(nèi)容就介紹到這里,感謝各位的閱讀!相信大家對(duì)“Python中的數(shù)據(jù)精度問題怎么解決”知識(shí)都有一定的了解,大家如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI