最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python中的decimal類型轉(zhuǎn)換實(shí)例詳解

 更新時(shí)間:2019年06月26日 08:43:52   作者:u010082526  
decimal 模塊實(shí)現(xiàn)了定點(diǎn)和浮點(diǎn)算術(shù)運(yùn)算符,使用的是大多數(shù)人所熟悉的模型,而不是程序員熟悉的模型,即大多數(shù)計(jì)算機(jī)硬件實(shí)現(xiàn)的 IEEE 浮點(diǎn)數(shù)運(yùn)算。這篇文章主要介紹了python里的decimal類型轉(zhuǎn)換,需要的朋友可以參考下

[Python標(biāo)準(zhǔn)庫]decimal——定點(diǎn)數(shù)和浮點(diǎn)數(shù)的數(shù)學(xué)運(yùn)算

        作用:使用定點(diǎn)數(shù)和浮點(diǎn)數(shù)的小數(shù)運(yùn)算。
        Python 版本:2.4 及以后版本

        decimal 模塊實(shí)現(xiàn)了定點(diǎn)和浮點(diǎn)算術(shù)運(yùn)算符,使用的是大多數(shù)人所熟悉的模型,而不是程序員熟悉的模型,即大多數(shù)計(jì)算機(jī)硬件實(shí)現(xiàn)的 IEEE 浮點(diǎn)數(shù)運(yùn)算。Decimal 實(shí)例可以準(zhǔn)確地表示任何數(shù),對其上取整或下取整,還可以對有效數(shù)字個(gè)數(shù)加以限制。

Decimal

         小數(shù)值表示為 Decimal 類的實(shí)例。構(gòu)造函數(shù)取一個(gè)整數(shù)或字符串作為參數(shù)。使用浮點(diǎn)數(shù)創(chuàng)建 Decimal 之前,可以先將浮點(diǎn)數(shù)轉(zhuǎn)換為一個(gè)字符串,使調(diào)用者能夠顯式地處理值得位數(shù),倘若使用硬件浮點(diǎn)數(shù)表示則無法準(zhǔn)確地表述。另外,利用類方法 from_float() 可以轉(zhuǎn)換為精確的小數(shù)表示。 

import decimal 
fmt = '{0:<25} {1:<25}' 
print fmt.format('Input', 'Output') 
print fmt.format('-' * 25, '-' * 25) 
# Integer 
print fmt.format(5, decimal.Decimal(5)) 
# String 
print fmt.format('3.14', decimal.Decimal('3.14')) 
# Float 
f = 0.1 
print fmt.format(repr(f), decimal.Decimal(str(f))) 
print fmt.format('%.23g' % f, str(decimal.Decimal.from_float(f))[:25]) 

        浮點(diǎn)數(shù)值 0.1 并不表示為一個(gè)精確的二進(jìn)制值,所以 float 的表示與 Decimal 值不同。在這個(gè)輸出中它被截?cái)酁?25 個(gè)字符。

        Decimal 還可以由元組創(chuàng)建,其中包含一個(gè)符號標(biāo)志(0 表示正,1 表示負(fù))、數(shù)字 tuple 以及一個(gè)整數(shù)指數(shù)。 

import decimal 
# Tuple 
t = (1, (1, 1), -2) 
print 'Input :', t 
print 'Decimal:', decimal.Decimal(t) 

        基于元組的表示創(chuàng)建時(shí)不太方便,不過它提供了一種可移植的方式,可以導(dǎo)出小數(shù)值而不會損失精度。tuple 形式可以在網(wǎng)絡(luò)上傳輸,或者在不支持精確小數(shù)值得數(shù)據(jù)庫中存儲,以后再轉(zhuǎn)回回 Decimal 實(shí)例。

算術(shù)運(yùn)算

        Decimal 重載了簡單的算術(shù)運(yùn)算符,所以可以采用內(nèi)置數(shù)值類型同樣的方式處理 Decimal 實(shí)例。

import decimal 
a = decimal.Decimal('5.1') 
b = decimal.Decimal('3.14') 
c = 4 
d = 3.14 
print 'a  =', repr(a) 
print 'b  =', repr(b) 
print 'c  =', repr(c) 
print 'd  =', repr(d) 
print 
print 'a + b =', a + b 
print 'a - b =', a - b 
print 'a * b =', a * b 
print 'a / b =', a / b 
print 
print 'a + c =', a + c 
print 'a - c =', a - c 
print 'a * c =', a * c 
print 'a / c =', a / c 
print 
print 'a + d =', 
try: 
 print a + d 
except TypeError, e: 
 print e 

        Decimal 運(yùn)算符還接受整數(shù)參數(shù),不過浮點(diǎn)數(shù)值必須轉(zhuǎn)換為 Decimal 實(shí)例。

        除了基本算術(shù)運(yùn)算,Decimal 還包括一些方法來查找以 10 為底的對數(shù)和自然對數(shù)。log10() 和 ln() 返回的值都是 Decimal 實(shí)例,所以可以與其他值一樣直接在公式中使用。

特殊值  

      除了期望的數(shù)字值,Decimal 還可以表示很多特殊值,包括正負(fù)無窮大值、“不是一個(gè)數(shù)”(NaN)和 0。

import decimal 
for value in [ 'Infinity', 'NaN', '0' ]: 
 print decimal.Decimal(value), decimal.Decimal('-' + value) 
print 
# Math with infinity 
print 'Infinity + 1:', (decimal.Decimal('Infinity') + 1) 
print '-Infinity + 1:', (decimal.Decimal('-Infinity') + 1) 
# Print comparing NaN 
print decimal.Decimal('NaN') == decimal.Decimal('Infinity') 
print decimal.Decimal('NaN') != decimal.Decimal(1) 

        與無窮大值相加會返回另一個(gè)無窮大值。與 NaN 比較相等性總會返回 false,而比較不等性總會返回 true。與 NaN 比較大小來確定排序順序沒有明確定義,這會導(dǎo)致一個(gè)錯(cuò)誤。

上下文

        到目前為止,前面的例子使用的都是 decimal 模塊的默認(rèn)行為。還可以使用一個(gè)上下文(context)覆蓋某些設(shè)置,如保持精度、如何完成取整、錯(cuò)誤處理等等。上下文可以應(yīng)用于一個(gè)線程中的所有 Decimal 實(shí)例,或者局部應(yīng)用于一個(gè)小代碼區(qū)。     

 1. 當(dāng)前上下文

        要獲取當(dāng)前全局上下文,可以使用 getcontext()。

import decimal 
import pprint 
context = decimal.getcontext() 
print 'Emax   =', context.Emax 
print 'Emin   =', context.Emin 
print 'capitals =', context.capitals 
print 'prec   =', context.prec 
print 'rounding =', context.rounding 
print 'flags  =' 
pprint.pprint(context.flags) 
print 'traps  =' 
pprint.pprint(context.traps) 

        這個(gè)示例腳本顯示了 Context 的公共屬性。

        2. 精度

        上下文的 prec 屬性控制著作為算術(shù)運(yùn)算結(jié)果所創(chuàng)建的新值的精度。字面量值會按這個(gè)屬性保持精度。

import decimal 
d = decimal.Decimal('0.123456') 
for i in range(4): 
  decimal.getcontext().prec = i 
  print i, ':', d, d * 1 

        要改變精度,可以直接為這個(gè)屬性賦一個(gè)新值。

        3. 取整

        取整有多種選擇,以保證值在所需精度范圍內(nèi)。

•ROUND_CEILING 總是趨向于無窮大向上取整。
•ROUND_DOWN 總是趨向 0 取整。
•ROUND_FLOOR 總是趨向負(fù)無窮大向下取整。
•ROUND_HALF_DOWN 如果最后一個(gè)有效數(shù)字大于或等于 5 則朝 0 反方向取整;否則,趨向 0 取整。
•ROUND_HALF_EVEN 類似于 ROUND_HALF_DOWN,不過,如果最后一個(gè)有效數(shù)字值為 5,則會檢查前一位。偶數(shù)值會導(dǎo)致結(jié)果向下取整,奇數(shù)值導(dǎo)致結(jié)果向上取整。
•ROUND_HALF_UP 類似于 ROUND_HALF_DOWN,不過如果最后一位有效數(shù)字為 5,值會朝 0 的反方向取整。
•ROUND_UP 朝 0 的反方向取整。
•ROUND_05UP 如果最后一位是 0 或 5,則朝 0 的反方向取整;否則向 0 取整。

import decimal 
 context = decimal.getcontext() 
ROUNDING_MODES = [ 
  'ROUND_CEILING', 
  'ROUND_DOWN', 
  'ROUND_FLOOR', 
  'ROUND_HALF_DOWN', 
  'ROUND_HALF_EVEN', 
  'ROUND_HALF_UP', 
  'ROUND_UP', 
  'ROUND_05UP', 
  ] 
header_fmt = '{:10} ' + ' '.join(['{:^8}'] * 6) 
print header_fmt.format(' ', 
            '1/8 (1)', '-1/8 (1)', 
            '1/8 (2)', '-1/8 (2)', 
            '1/8 (3)', '-1/8 (3)', 
            ) 
for rounding_mode in ROUNDING_MODES: 
  print '{0:10}'.format(rounding_mode.partition('_')[-1]), 
  for precision in [ 1, 2, 3 ]: 
    context.prec = precision 
    context.rounding = getattr(decimal, rounding_mode) 
    value = decimal.Decimal(1) / decimal.Decimal(8) 
    print '{0:^8}'.format(value), 
    value = decimal.Decimal(-1) / decimal.Decimal(8) 
    print '{0:^8}'.format(value), 
  print 

 這個(gè)程序顯示了使用不同算法將同一個(gè)值取整為不同精度的效果。

        4. 局部上下文

        使用 Python 2.5 或以后版本時(shí),可以使用 with 語句對一個(gè)代碼塊應(yīng)用上下文。

import decimal 
with decimal.localcontext() as c: 
  c.prec = 2 
  print 'Local precision:', c.prec 
  print '3.14 / 3 =', (decimal.Decimal('3.14') / 3) 
print 
print 'Default precision:', decimal.getcontext().prec 
print '3.14 / 3 =', (decimal.Decimal('3.14') / 3) 

      Context 支持 with 使用的上下文管理器 API,所以這個(gè)設(shè)置只在塊內(nèi)應(yīng)用。

        5. 各實(shí)例上下文

        上下文還可以用來構(gòu)造 Decimal 實(shí)例,然后可以從這個(gè)上下文繼承精度和轉(zhuǎn)換的取整參數(shù)。

import decimal 
# Set up a context with limited precision 
c = decimal.getcontext().copy() 
c.prec = 3 
# Create our constant 
pi = c.create_decimal('3.1415') 
# The constant value is rounded off 
print 'PI  :', pi 
 
# The result of using the constant uses the global context 
print 'RESULT:', decimal.Decimal('2.01') * pi 

        這樣一來,應(yīng)用就可以區(qū)別于用戶數(shù)據(jù)精度而另外選擇常量值精度。

        6. 線程

        “全局”上下文實(shí)際上是線程本地上下文,所以完全可以使用不同的值分別配置各個(gè)線程。

import decimal 
import threading 
from Queue import PriorityQueue 
class Multiplier(threading.Thread): 
  def __init__(self, a, b, prec, q): 
    self.a = a 
    self.b = b 
    self.prec = prec 
    self.q = q 
    threading.Thread.__init__(self) 
  def run(self): 
    c = decimal.getcontext().copy() 
    c.prec = self.prec 
 decimal.setcontext(c) 
    self.q.put( (self.prec, a * b) ) 
    return 
 a = decimal.Decimal('3.14') 
b = decimal.Decimal('1.234') 
# A PriorityQueue will return values sorted by precision, no matter 
# what order the threads finish. 
q = PriorityQueue() 
threads = [ Multiplier(a, b, i, q) for i in range(1, 6) ] 
for t in threads: 
  t.start() 
 
for t in threads: 
  t.join() 
 
for i in range(5): 
  prec, value = q.get() 
  print prec, '\t', value 

這個(gè)例子使用指定的值創(chuàng)建一個(gè)新的上下文,然后安裝到各個(gè)線程中。

總結(jié)

以上所述是小編給大家介紹的python中的decimal類型轉(zhuǎn)換實(shí)例詳解,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時(shí)回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
如果你覺得本文對你有幫助,歡迎轉(zhuǎn)載,煩請注明出處,謝謝!

相關(guān)文章

  • Pandas DataFrame中的tuple元素遍歷的實(shí)現(xiàn)

    Pandas DataFrame中的tuple元素遍歷的實(shí)現(xiàn)

    這篇文章主要介紹了Pandas DataFrame中的tuple元素遍歷的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-10-10
  • windows下 兼容Python2和Python3的解決方法

    windows下 兼容Python2和Python3的解決方法

    這篇文章主要介紹了windows下 兼容Python2和Python3的解決方法,需要的朋友可以參考下
    2018-12-12
  • python多進(jìn)程共享Array問題

    python多進(jìn)程共享Array問題

    multiprocessing庫提供了Array類,允許在多個(gè)進(jìn)程間共享數(shù)組,Array在共享內(nèi)存中創(chuàng)建,各進(jìn)程可直接訪問和修改其元素,實(shí)現(xiàn)數(shù)據(jù)同步,Array支持多種數(shù)據(jù)類型,可選鎖定參數(shù)以保證數(shù)據(jù)安全
    2024-09-09
  • Python函數(shù)的默認(rèn)參數(shù)設(shè)計(jì)示例詳解

    Python函數(shù)的默認(rèn)參數(shù)設(shè)計(jì)示例詳解

    這篇文章主要給大家介紹了關(guān)于Python函數(shù)的默認(rèn)參數(shù)設(shè)計(jì)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用Python具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12
  • 關(guān)于tensorflow和keras版本的對應(yīng)關(guān)系

    關(guān)于tensorflow和keras版本的對應(yīng)關(guān)系

    這篇文章主要介紹了關(guān)于tensorflow和keras版本的對應(yīng)關(guān)系,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • python多個(gè)字符串條件分割split方式

    python多個(gè)字符串條件分割split方式

    這篇文章主要介紹了python多個(gè)字符串條件分割split方式,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-02-02
  • python求解漢諾塔游戲

    python求解漢諾塔游戲

    這篇文章主要為大家詳細(xì)介紹了python求解漢諾塔游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-07-07
  • Python常用模塊logging——日志輸出功能(示例代碼)

    Python常用模塊logging——日志輸出功能(示例代碼)

    logging模塊是Python的內(nèi)置模塊,主要用于輸出運(yùn)行日志,可以靈活配置輸出日志的各項(xiàng)信息。這篇文章主要介紹了Python常用模塊logging——日志輸出的實(shí)例代碼,需要的朋友可以參考下
    2019-11-11
  • Matplotlib繪圖基礎(chǔ)之3D圖形繪制詳解

    Matplotlib繪圖基礎(chǔ)之3D圖形繪制詳解

    matplotlib 在1.0版本之前其實(shí)是不支持3D圖形繪制的,后來的版本中,matplotlib加入了3D圖形的支持,擴(kuò)展了其展示數(shù)據(jù)分布和關(guān)系的能力,下面就和大家介紹一下matplotlib中繪制各類3D圖形的方法
    2023-08-08
  • Python中的字典與成員運(yùn)算符初步探究

    Python中的字典與成員運(yùn)算符初步探究

    這篇文章主要介紹了Python中的字典與成員運(yùn)算符初步探究,是Python入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下
    2015-10-10

最新評論

丰原市| 古丈县| 上虞市| 微山县| 宜良县| 永安市| 临邑县| 虞城县| 富顺县| 县级市| 丽水市| 阳信县| 荣成市| 余江县| 兰考县| 宜兴市| 武平县| 集贤县| 铜川市| 黄平县| 理塘县| 德安县| 平陆县| 青川县| 武城县| 临漳县| 边坝县| 武冈市| 开化县| 湟源县| 丰顺县| 手机| 唐河县| 沙河市| 连城县| 绥德县| 阳信县| 襄樊市| 华池县| 卓资县| 石城县|