python 輸出小數控制



  一、要求較小的精度
  將精度高的浮點數轉換成精度低的浮點數。
  1.round()內置方法
round()不是簡單的四舍五入的處理方式。
  >>> round(2.5)
  2
  >>> round(1.5)
  2
  >>> round(2.675)
  3
  >>> round(2.675, 2)
  2.67
  round()如果只有一個數作為參數,不指定位數的時候,返回的是一個整數,而且是最靠近的整數(這點上類似四舍五入)。

但是當出現.5的時候,兩邊的距離都一樣,round()取靠近的偶數
2。當指定取舍的小數點位數的時候,一般情況也是使用四舍五入的規則,但是碰到.5的這樣情況,

如果要取舍的位數前的小樹是奇數,則直接舍棄,如果偶數這向上取舍。看下面的示例:
  >>> round(2.635, 2)
  2.63
  >>> round(2.645, 2)
  2.65
  >>> round(2.655, 2)
  2.65
  >>> round(2.665, 2)
  2.67
  >>> round(2.675, 2)
  2.67
  2. 使用格式化
  效果和round()是一樣的。
  >>> a = ("%.2f" % 2.635)
  >>> a
  '2.63'
  >>> a = ("%.2f" % 2.645)
  >>> a
  '2.65'
  >>> a = int(2.5)
  >>> a
  2
  二、要求超過17位的精度分析
  python默認的是17位小數的精度,但是這里有一個問題,就是當我們的計算需要使用更高的精度(超過17位小數)的時候該怎么做呢?
  1. 使用格式化(不推薦)
  >>> a = "%.30f" % (1/3)
  >>> a
  '0.333333333333333314829616256247'
  可以顯示,但是不准確,后面的數字往往沒有意義。
  2. 高精度使用decimal模塊,配合getcontext
  >>> from decimal import *
  >>> print(getcontext())
  Context(prec=28, rounding=ROUND_HALF_EVEN, Emin=-999999, Emax=999999,
capitals=1, clamp=0, flags=[], traps=[InvalidOperation, DivisionByZero,
Overflow])
  >>> getcontext().prec = 50
  >>> b = Decimal(1)/Decimal(3)
  >>> b
  Decimal('0.33333333333333333333333333333333333333333333333333')
  >>> c = Decimal(1)/Decimal(17)
  >>> c
  Decimal('0.058823529411764705882352941176470588235294117647059')
  >>> float(c)
  0.058823529411764705
  默認的context的精度是28位,可以設置為50位甚至更高,都可以。這樣在分析復雜的浮點數的時候

,可以有更高的自己可以控制的精度。其實可以留意下context里面的這rounding=ROUND_HALF_EVEN
參數。ROUND_HALF_EVEN, 當half的時候,靠近even.
  三、關於小數和取整
  既然說到小數,就必然要說到整數。一般取整會用到這些函數:
  1. round()
  這個不說了,前面已經講過了。一定要注意它不是簡單的四舍五入,而是ROUND_HALF_EVEN的策略。
  2. math模塊的ceil(x)
  取大於或者等於x的最小整數。
  3. math模塊的floor(x)
  去小於或者等於x的最大整數。
  >>> from math import ceil, floor
  >>> round(2.5)
  2
  >>> ceil(2.5)
  3
  >>> floor(2.5)
  2
  >> round(2.3)
  2
  >>> ceil(2.3)
  3
  >>> floor(2.3)
  2
  >>>


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM