欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python+decimal完成精度計(jì)算的示例詳解

 更新時(shí)間:2022年10月19日 10:47:55   作者:Sir 老王  
在進(jìn)行小數(shù)計(jì)算的時(shí)候使用float,經(jīng)常會(huì)出現(xiàn)小數(shù)位不精確的情況。在python編程中,推薦使用decimal來(lái)完成小數(shù)位的精度計(jì)算。本文將通過(guò)示例詳細(xì)說(shuō)說(shuō)decimal的使用,需要的可以參考一下

在進(jìn)行小數(shù)計(jì)算的時(shí)候使用float,經(jīng)常會(huì)出現(xiàn)小數(shù)位不精確的情況。在python編程中,推薦使用decimal來(lái)完成小數(shù)位的精度計(jì)算。

decimal是python中的標(biāo)準(zhǔn)庫(kù),直接將Decimal導(dǎo)入到代碼塊中使用。

decimal意思為十進(jìn)制,這個(gè)模塊提供了十進(jìn)制浮點(diǎn)運(yùn)算支持。通過(guò)幾個(gè)常見的實(shí)戰(zhàn)用例來(lái)說(shuō)明一下其用法。

1. 浮點(diǎn)數(shù)轉(zhuǎn)Decimal

使用Decimal.from_float函數(shù)將隨便一個(gè)float類型的小數(shù)轉(zhuǎn)換成Decimal的數(shù)據(jù)類型,結(jié)果float類型數(shù)據(jù)就顯出原形了。

#?It?imports?the?Decimal?class?from?the?decimal?module.
import?decimal
from?decimal?import?Decimal

#?It?converts?the?float?10.245?to?a?Decimal?object.
decimal_?=?Decimal.from_float(10.245)

print('浮點(diǎn)數(shù)轉(zhuǎn)為Decimal后:{0}'.format(decimal_))

#?浮點(diǎn)數(shù)轉(zhuǎn)為Decimal后:10.2449999999999992184029906638897955417633056640625

從結(jié)果來(lái)看,float浮點(diǎn)數(shù)轉(zhuǎn)換完成以后精度位數(shù)就變得很長(zhǎng)不是原先的三位小數(shù)了,這是因?yàn)閒loat浮點(diǎn)數(shù)本身就不精確轉(zhuǎn)換之后才會(huì)出現(xiàn)上面的效果。

2. Decimal除法設(shè)置

隨機(jī)選兩個(gè)整數(shù)將其定義為Decimal類型的數(shù)據(jù),之后對(duì)這兩個(gè)整個(gè)做除法通過(guò)保留相應(yīng)的結(jié)果位數(shù)對(duì)其返回結(jié)果進(jìn)行優(yōu)化。

#?It?imports?all?the?names?from?the?decimal?module?into?the?current?namespace.
from?decimal?import?*

#?It?sets?the?precision?of?the?decimal?module?to?8.
getcontext().prec?=?8

#?Dividing?1?by?6?and?storing?the?result?in?the?variable?`decimal_`.
decimal_?=?Decimal(1)/Decimal(6)

print('精確到8位小數(shù)后的結(jié)果是:{0}'.format(decimal_))

#?精確到8位小數(shù)后的結(jié)果是:0.16666667

很明顯做除法以后的結(jié)果應(yīng)該是一個(gè)無(wú)限小數(shù),設(shè)置保留8位小數(shù)之后自動(dòng)進(jìn)行了四舍五入的計(jì)算得到0.16666667的結(jié)果。

3. Quantize設(shè)置結(jié)果

同樣是保留了兩位小數(shù),使用quantize函數(shù)能完成同樣的效果,默認(rèn)結(jié)果也是經(jīng)過(guò)了四舍五入的計(jì)算,若是想要固定小數(shù)位數(shù)使用此方法比較靠譜。

#?It?imports?all?the?names?from?the?decimal?module?into?the?current?namespace.
from?decimal?import?*

#?Rounding?the?number?3.7829?to?two?decimal?places.
decimal_?=?Decimal('3.7829').quantize(Decimal('0.00'))

print('quantize設(shè)置保留兩位小數(shù)后的結(jié)果:{0}'.format(decimal_))

# quantize設(shè)置保留兩位小數(shù)后的結(jié)果:3.78

4. Decimal精度設(shè)置

這里還是做一個(gè)結(jié)果為無(wú)限小數(shù)的除法,分別使用向上取整、向下取整的方式保留一定位數(shù)的小數(shù)來(lái)說(shuō)明問(wèn)題。

一般情況下可能使用的都是向上取整,但是在一些領(lǐng)域比較金融、證券行業(yè)就必須采取向下取整的方式,首先來(lái)看一下常用的向上取整的方式來(lái)保留小數(shù)。

#?It?imports?all?the?names?from?the?decimal?module?into?the?current?namespace.
from?decimal?import?*

#?It?sets?the?rounding?mode?to?ROUND_CEILING.
getcontext().rounding?=?getattr(decimal,?'ROUND_CEILING')

#?It?sets?the?precision?of?the?decimal?module?to?10.
getcontext().prec?=?10

#?Converting?the?integer?9?to?a?string?and?then?converting?it?to?a?Decimal?object.
decimal_?=?Decimal(1)?/?Decimal(str(9))

print('向上取整保留10位小數(shù):{0}'.format(decimal_.quantize(Decimal('0.0000000000'))))

#?向上取整保留10位小數(shù):0.1111111112

這里有個(gè)問(wèn)題就是,如果getcontext().prec已經(jīng)設(shè)置小數(shù)位是10,那么在使用quantize函數(shù)固定小數(shù)位的時(shí)候就必須不超過(guò)10位才行,也就是不能超過(guò)有效位數(shù)否則就會(huì)報(bào)錯(cuò)。

接下來(lái)看一下向下取整,向下取整的小數(shù)保留方式只需要修改getcontext().rounding的屬性為向下取整即可,為了對(duì)比結(jié)果我們還是采用同樣的數(shù)據(jù)來(lái)看看效果。

#?It?imports?all?the?names?from?the?decimal?module?into?the?current?namespace.
from?decimal?import?*

#?It?sets?the?rounding?mode?to?ROUND_CEILING.
getcontext().rounding?=?getattr(decimal,?'ROUND_FLOOR')

#?It?sets?the?precision?of?the?decimal?module?to?10.
getcontext().prec?=?10

#?Converting?the?integer?9?to?a?string?and?then?converting?it?to?a?Decimal?object.
decimal_?=?Decimal(1)?/?Decimal(str(9))

print('向下取整保留10位小數(shù):{0}'.format(decimal_.quantize(Decimal('0.0000000000'))))

#?向下取整保留10位小數(shù):0.1111111111

可以發(fā)現(xiàn)同樣的數(shù)據(jù)做除法,向下取整時(shí)結(jié)果是0.1111111111,向上取整時(shí)結(jié)果是0.1111111112。

同樣,還是很多的其他保留小數(shù)的方式可以使用比如四舍五入的方式,這也是很多很多行業(yè)會(huì)采取的一種小數(shù)保留的方式,再演示一下四舍五入時(shí)的保留小數(shù)。

#?It?imports?all?the?names?from?the?decimal?module?into?the?current?namespace.
from?decimal?import?*

#?It?sets?the?rounding?mode?to?ROUND_HALF_UP.
getcontext().rounding?=?getattr(decimal,?'ROUND_HALF_UP')

#?It?sets?the?precision?of?the?decimal?module?to?4.
getcontext().prec?=?5

#?It?converts?the?string?'3.14159'?to?a?Decimal?object.
decimal_?=?Decimal('3.14159')

print('四舍五入保留4位小數(shù):{0}'.format(decimal_.quantize(Decimal('0.0000'))))

#?四舍五入保留4位小數(shù):3.1416

將3.14159通過(guò)四舍五入的方式保留4位小數(shù)之后就變成了3.1416,和我們預(yù)想的結(jié)果一樣。

到此這篇關(guān)于Python+decimal完成精度計(jì)算的示例詳解的文章就介紹到這了,更多相關(guān)Python decimal精度計(jì)算內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python函數(shù)參數(shù)和注解的使用

    Python函數(shù)參數(shù)和注解的使用

    本文介紹了Python函數(shù)的四種參數(shù):定位參數(shù)、可變參數(shù)、默認(rèn)值參數(shù)、關(guān)鍵字參數(shù),和第五種Python3新特性參數(shù):僅限關(guān)鍵字參數(shù)。函數(shù)注解是一種元數(shù)據(jù),存在__annotations__屬性中,備注函數(shù)的參數(shù)和返回值的類型,它只是個(gè)注解,Python不會(huì)做任何強(qiáng)制檢查。
    2021-06-06
  • 深入探究Python Numba庫(kù)編譯優(yōu)化利器

    深入探究Python Numba庫(kù)編譯優(yōu)化利器

    這篇文章主要為大家介紹了Python Numba庫(kù)編譯優(yōu)化利器深入探究,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2024-01-01
  • Python中的for循環(huán)詳情

    Python中的for循環(huán)詳情

    這篇文章主要介紹了Python中的for循環(huán),for語(yǔ)句實(shí)際上解決的是循環(huán)問(wèn)題。在很多的高級(jí)語(yǔ)言中都有for循環(huán)(for loop)。下面就來(lái)簡(jiǎn)單給大家介紹Python中的for循環(huán)的相關(guān)資料,需要的朋友可以參考一下
    2021-10-10
  • python中.format()方法使用詳解

    python中.format()方法使用詳解

    這篇文章主要介紹了python中.format()方法使用詳解,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的朋友可以參考一下
    2022-07-07
  • 使用Python?Cupy模塊加速大規(guī)模數(shù)值計(jì)算實(shí)例深究

    使用Python?Cupy模塊加速大規(guī)模數(shù)值計(jì)算實(shí)例深究

    Cupy是一個(gè)基于NumPy的庫(kù),專門設(shè)計(jì)用于在GPU上進(jìn)行高性能計(jì)算,它提供了與NumPy相似的API,因此用戶可以很容易地將現(xiàn)有的NumPy代碼遷移到Cupy上,從而充分利用GPU的并行計(jì)算能力
    2023-12-12
  • Python中棧、隊(duì)列與優(yōu)先級(jí)隊(duì)列的實(shí)現(xiàn)方法

    Python中棧、隊(duì)列與優(yōu)先級(jí)隊(duì)列的實(shí)現(xiàn)方法

    這篇文章主要給大家介紹了關(guān)于Python中棧、隊(duì)列與優(yōu)先級(jí)隊(duì)列的實(shí)現(xiàn)方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用python具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-06-06
  • Pycharm導(dǎo)包失敗問(wèn)題及解決

    Pycharm導(dǎo)包失敗問(wèn)題及解決

    這篇文章主要介紹了Pycharm導(dǎo)包失敗問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • 使用keras內(nèi)置的模型進(jìn)行圖片預(yù)測(cè)實(shí)例

    使用keras內(nèi)置的模型進(jìn)行圖片預(yù)測(cè)實(shí)例

    這篇文章主要介紹了使用keras內(nèi)置的模型進(jìn)行圖片預(yù)測(cè)實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-06-06
  • TensorFlow實(shí)現(xiàn)非線性支持向量機(jī)的實(shí)現(xiàn)方法

    TensorFlow實(shí)現(xiàn)非線性支持向量機(jī)的實(shí)現(xiàn)方法

    本篇文章主要介紹了TensorFlow實(shí)現(xiàn)非線性支持向量機(jī)的實(shí)現(xiàn)方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-04-04
  • Dlib+OpenCV深度學(xué)習(xí)人臉識(shí)別的方法示例

    Dlib+OpenCV深度學(xué)習(xí)人臉識(shí)別的方法示例

    這篇文章主要介紹了Dlib+OpenCV深度學(xué)習(xí)人臉識(shí)別的方法示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05

最新評(píng)論