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

Python中的Decimal使用及說明

 更新時間:2023年10月27日 17:10:17   作者:craftsman2020  
這篇文章主要介紹了Python中的Decimal使用及說明,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教

1.可以傳遞給Decimal整型或者字符串參數

但不能是浮點數據,因為浮點數據本身就不準確。

# coding=utf-8
from decimal import Decimal, getcontext

# 1.可以傳遞給Decimal整型或者字符串參數,但不能是浮點數據,因為浮點數據本身就不準確。
# 傳入浮點數 5.55
a = Decimal(5.55)
print('a = ', a)
a = a * 100
print('a = ', a)
# 傳入字符串 ‘5.55'
b = Decimal('5.55')*100
print('b = ', b)

>>> a =  5.54999999999999982236431605997495353221893310546875
>>> a =  554.9999999999999822364316060
>>> b =  555.00

2.要從浮點數據轉換為Decimal類型

# 2.要從浮點數據轉換為Decimal類型
c = Decimal.from_float(22.222)
print('c = ', c)

>>> c =  22.22200000000000130739863379858434200286865234375

3.getcontext().prec設置有效數字的個數

# 3.getcontext().prec設置有效數字的個數。
# 通過設定有效數字,限定結果樣式
getcontext().prec = 4
x1 = Decimal(1) / Decimal(3)  # 結果為Decimal('0.3333'),四個有效數字
print('x1 = ', x1)
x2 = Decimal(100) / Decimal(3)
print('x2 = ', x2)
x3 = Decimal(700000)/Decimal(9)
print('x3 = ', x3)

>>> x1 =  0.3333
>>> x2 =  33.33
>>> x3 =  7.778E+4
# 注意:
# 如果prec的長度比數字的長度小的時候,*100得出的數就不對了
num = '88.8888'
f = Decimal(num)
print('f = ', f)
g = f * 100
print('g = ', g)
h = Decimal('999.999')
print('h = ', h)

>>> f =  88.8888
>>> g =  8889
>>> h =  999.999

4.四舍五入,保留幾位小數

# 4.四舍五入,保留幾位小數
d = Decimal('50.5679').quantize(Decimal('0.00'))
print('d = ', d)  # 結果為Decimal('50.57'),結果四舍五入保留了兩位小數

>>> d =  50.57

5.Decimal 結果轉化為string

# 5.Decimal 結果轉化為string
e = str(Decimal('3.40').quantize(Decimal('0.0')))
print('e = ', e)

>>> e =  3.4

6.decimal模塊進行十進制數學計算

# 6.decimal模塊進行十進制數學計算
i = Decimal('4.20') + Decimal('2.10') + Decimal('6.30')
print('i = ', i)

>>> i =  12.60
# 當然精度提升的同時,肯定帶來的是性能的損失。在對數據要求特別精確的場合(例如財務結算),這些性能的損失是值得的。
# 但是如果是大規(guī)模的科學計算,就需要考慮運行效率了。畢竟原生的float比Decimal對象肯定是要快很多的。

7.python decimal.quantize()參數

rounding的各參數解釋與行為

ROUND_CEILING (towards Infinity),
ROUND_DOWN (towards zero),
ROUND_FLOOR (towards -Infinity),
ROUND_HALF_DOWN (to nearest with ties going towards zero),
ROUND_HALF_EVEN (to nearest with ties going to nearest even integer),
ROUND_HALF_UP (to nearest with ties going away from zero), or
ROUND_UP (away from zero).
ROUND_05UP (away from zero if last digit after rounding towards zero would have been 0 or 5; otherwise towards zero)
x = Decimal('-3.1415926535') + Decimal('-2.7182818285')
print x
print x.quantize(Decimal('1.0000'), ROUND_HALF_EVEN)
print x.quantize(Decimal('1.0000'), ROUND_HALF_DOWN)
print x.quantize(Decimal('1.0000'), ROUND_CEILING)
print x.quantize(Decimal('1.0000'), ROUND_FLOOR)
print x.quantize(Decimal('1.0000'), ROUND_UP)
print x.quantize(Decimal('1.0000'), ROUND_DOWN)

output:
-5.8598744820
-5.8599
-5.8599
-5.8598
-5.8599
-5.8599
-5.8598

https://www.cnblogs.com/piperck/p/5843253.html
https://blog.csdn.net/weixin_37989267/article/details/79473706
  • ROUND_HALF_EVENT 和 ROUND_HALF_DOWN:EVENT是quansize的默認設置值,可以通過getcontext()得到,EVENT四舍五入進了一位,DOWN為接近最近的0進了一位。
  • ROUND_CEILING 和 ROUND_FLOOR:CEILING超過5沒有進位是因為它傾向正無窮,FLOOR為了總是變得更小所以進了一位。
  • ROUND_UP 和 ROUND_DOWN:UP始終進位,DOWN始終不會進位。

總結

其實這里我們通過上面一組例子可以發(fā)現,正數的行為非常可預期也非常簡單,負數的情況稍復雜,有些函數就是設計為負數在某些情況中使用的。

正數中無法重現的ROUND_DOWN和ROUND_FLOOR的區(qū)別,ROUND_DOWN是無論后面是否大于5都不會管保持原狀,而Floor在正數中的行為也是如此,

但是在負數中為了傾向無窮小,所以無論是否大于5,他都會變得更小而進位。

反而ROUND_UP和ROUND_DOWN的行為是最可預期的,那就是無論后面數大小,UP就進位,DOWN就始終不進位。

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • python 實現對文件夾內的文件排序編號

    python 實現對文件夾內的文件排序編號

    下面小編就為大家分享一篇python 實現對文件夾內的文件排序編號,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-04-04
  • Python實現通過解析域名獲取ip地址的方法分析

    Python實現通過解析域名獲取ip地址的方法分析

    這篇文章主要介紹了Python實現通過解析域名獲取ip地址的方法,結合實例形式總結分析了兩種比較常見的解析域名對應IP地址相關操作技巧,需要的朋友可以參考下
    2019-05-05
  • 100行python代碼實現跳一跳輔助程序

    100行python代碼實現跳一跳輔助程序

    這篇文章主要介紹了100行代碼實現跳一跳輔助程序,接下來要分享的是用“純軟件”的方法來玩“跳一跳”。本人只做過Android開發(fā),因此下面只給出Android平臺下的實現方法。需要的朋友可以參考下
    2018-01-01
  • Python異步編程中asyncio.gather的并發(fā)控制詳解

    Python異步編程中asyncio.gather的并發(fā)控制詳解

    在Python異步編程生態(tài)中,asyncio.gather是并發(fā)任務調度的核心工具,本文將通過實際場景和代碼示例,展示如何結合信號量機制實現精準并發(fā)控制,希望對大家有所幫助
    2025-03-03
  • python 自動監(jiān)控最新郵件并讀取的操作

    python 自動監(jiān)控最新郵件并讀取的操作

    這篇文章主要介紹了python 自動監(jiān)控最新郵件并讀取的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-03-03
  • Python打印詳細報錯日志logging問題

    Python打印詳細報錯日志logging問題

    這篇文章主要介紹了Python打印詳細報錯日志logging問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • Python遞歸函數特點及原理解析

    Python遞歸函數特點及原理解析

    這篇文章主要介紹了Python遞歸函數特點及原理解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-03-03
  • Python自動化測試pytest中fixtureAPI簡單說明

    Python自動化測試pytest中fixtureAPI簡單說明

    這篇文章主要為大家介紹了Python自動化測試pytest中fixtureAPI的簡單說明,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步
    2021-10-10
  • pycharm運行OpenCV項目踩坑記錄

    pycharm運行OpenCV項目踩坑記錄

    本文主要介紹了在PyCharm中運行OpenCV項目時遇到的問題及其解決方法,具有一定的參考價值,感興趣的可以了解一下
    2025-03-03
  • 詳解Numpy中的廣播原則/機制

    詳解Numpy中的廣播原則/機制

    這篇文章主要介紹了Numpy中的廣播原則/機制,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-09-09

最新評論