20多個python實用小例子(23)--如何對數值進行精確的小數計算

2022-01-07 浩浩學編程
場景

我們有些場景下需要處理金融的相關數據,比如:金額、對帳數據、各行業的金融報表等等,如果使用float類型的時候,小數位數多了之後,就容易產生細小的誤差。

比如下面的例子:

Python 3.7.0 (v3.7.0:1bf9cc5093, Jun 27 2018, 04:59:51) [MSC v.1914 64 bit (AMD64)] on win32Type "copyright", "credits" or "license()" for more information.>>> a=3.8>>> b = 8.3>>> a+b12.100000000000001>>> a+b==12.1False>>>

從上面看,我們日常計算的時候,3.8+8.3就是等於12.1,但是由於帶小數點的數,python默認自動會轉換為float類型,而float類型會最長表示17位的小數,所以,導致計算後跟12.1並不相等,這樣,就容易在代碼裡產生錯誤。

這種問題對應我們一般的計算其實是夠用了,並沒有什麼問題,而且也可以用我們上一次的內容來處理這個小數。

20多個python實用小例子(22)--如何對數值進行取整

>>> round(a+b,1)==12.1True>>>

那我們要怎麼處理類似金融需要的位數呢?解決方案

這個方案裡,就是使用decimal模塊,這個模塊專為金融類數據服務,它可以控制精度,但是就是性能會差一點。

我們來看看如何進行操作?

>>> a = Decimal('3.8')>>> b = Decimal('8.3')>>> a+b == Decimal('12.1')True>>> 

同時該模塊提供localcontext來控制保留的小數位數,比如:

>>> from decimal import localcontext>>> with localcontext() as lct:  lct.prec=3  print(a/b)0.458>>> with localcontext() as lct:  lct.prec=50  print(a/b)0.45783132530120481927710843373493975903614457831325>>>

還是那句話,有需要高精度的時候才用這個庫,正常情況下,float就夠用了。

每天學一點,積少成多。

如果遇到問題,歡迎加微信提問或者在群裡交流提問。

看到這裡別忘了隨手點讚一下噢!!

如何加入python交流和答疑群:

請需要的同學掃描下面二維碼,通過後會拉你進入交流群,請注意:關注公眾號。

添加時,請使用暗號:python入門, 已關注公眾號

覺得有所收穫的話,大家別忘了隨手點讚、轉載、推薦和讚賞哦!!!!!

相關焦點

  • 20多個python實用小例子(22)--如何對數值進行取整
    解決方案這個方案裡,就是使用round函數,很多人以為只能取整,其實它可以保留小數。我們來看看如何進行操作?>>>x = 1.23456>>>round(x)1保留兩位小數:>>>x = 1.23456>>>round(x,2)1.23PS:如果是類似於1.5、2.5這種處於兩個整數中間的數
  • 「python學習手冊-筆記」003.數值類型
    003.數值類型本系列文章是我個人學習《python學習手冊(第五版)》的學習筆記,其中大部分內容為該書的總結和個人理解,小部分內容為相關知識點的擴展。非商業用途轉載請註明作者和出處;商業用途請聯繫本人(gaoyang1019@hotmail.com)獲取許可。
  • 20多個python實用小例子(1)
    我整理了 20多 個Python入門的小例子。方便同學們在實踐中能夠依葫蘆畫瓢,慢慢習慣使用python。1、對溫度進行轉換,比如華氏溫度轉換為攝氏溫度,或者攝氏溫度轉華氏溫度華氏溫度轉攝氏溫度的公式:C = (F - 32) / 1.8攝氏溫度轉華氏溫度的公式:F=C×1.8+32"""將華氏溫度轉換為攝氏溫度"""f = float(input('輸入華氏溫度:
  • Python中的浮點數和小數
    了解decimal類型的最佳資料,就是它的官方文檔:https://docs.python.org/3/library/decimal.html。在浮點數運算中,總會有誤差的,這一點在下面會顯示出來。要解決浮點數運算的誤差問題,decimal所創建的小數類型,則是一種比較好的選擇。
  • 如何在 Python 裡面精確四捨五入?
    如何精確地計算浮點數?那 Python 是如何處理浮點數的四捨五入問題的呢?今天分享的文章,對此展開了深入的剖析。本文作者 kingname,來自網易,公眾號「未聞Code」。如需轉載,請聯繫作者。今天又有一個Python初學者被中文技術博客中的垃圾文章給誤導了。這位初學者的問題是:在Python中,如何精確地進行浮點數的四捨五入,保留兩位小數?
  • 20多個python實用小例子(21)--如何拆分有多個分割符的字符串
    it is very\tgood'這個字符串裡面分割符有:單個空格,多個空格,@,\t。使用str.split()顯然是無法實現的。解決方案這個方案裡,就要用到re.split()函數,re是python裡面常用的處理正則表達式的模塊。可以通過import re來導入。我們來看看如何進行操作?str = 'Hello World, My name@ is Python!
  • python教程之python數學運算
    中進行分數(fraction)運算分數運算是python中的一個模塊(module)。num1,'平方根:',math.sqrt(num1))#計算num1的平方根print(num2,'平方根:',num2**0.5)#計算num2的平方根print('數值',num1,'的3次方:',math.pow(num1,3))#計算num1的3次方print('數值',
  • 絕對收藏的Python小例子(上)
    將字符串 str 當成有效的表達式來求值並返回計算結果取出字符串中內容In [1]: s = "1 + 3 +5" ...: eval(s) ...In [104]: print("i am {0},age{1}".format("tom",18))i am tom,age183.1415926{:.2f}3.14保留小數點後兩位3.1415926{:+.2f}+3.14帶符號保留小數點後兩位-1{:+.2f}-1.00帶符號保留小數點後兩位2.71828{:.0f}3不帶小數5{:0>2d}
  • 為什麼你需要少看中文技術博客以及如何在Python裡面精確四捨五入
    這位初學者的問題是:在Python中,如何精確地進行浮點數的四捨五入,保留兩位小數?如果你在Google或者百度上搜索,你會發現大量的來自CSDN或者簡書上面的文章講到這一點,但是他們的說法無外乎下面幾種:連例子都不舉的垃圾文章如下圖所示,懶得吐槽。
  • 03-python中的除法與小數
    小數或浮點數Python中使用浮點數(小數)來表示數字而不是整數。數字的一些例子,表示為0.5和-7.8237591。
  • 注意了,這些數值計算的坑千萬別踩!
    這是因為計算機是以二進位存儲數值的,我們輸入的十進位數值都會轉換成二進位進行計算,十進位轉二進位再轉換成十進位就不是原來那個十進位了 。  舉個例子: 十進位的0.1轉換成二進位是0.0 0011 0011 0011...(無數個0011),再轉換成十進位就是0.1000000000000000055511151231。
  • 雅虎研究員將圓周率精確到小數點後2千萬億位
    據英國廣播公司(BBC)9月17日報導,數學家熱衷於計算圓周率的小數位數,將此視為不錯的消遣。不久前,日本一名男子剛剛創下將圓周率精確到小數點後5萬億位的新紀錄。日前,雅虎公司的一名研究員採用「雲計算」技術,將圓周率精確到小數點後2千萬億位。 雅虎科技公司的研究員尼古拉斯·斯則(Nicholas Sze),採用「雲計算」技術,利用1000臺電腦同時計算,歷時23天,將圓周率精確到小數點後2千萬億位。期間,每臺計算機都要運行不同的公式,將圓周率複雜的公式分解成更小的數學問題,然後再將它們綜合到一起,得出圓周率的精確數值。
  • 「每天進步一點點」案例學習python數值操作
    而我們熟悉的是自然語言,熟悉的是十進位數字,所以在很多的情況我們補充理解一些在python中數值的一些操作手段。一、案例分析大家都會聽到這樣一句話:每天進步一點點,一年後將會收穫巨大。其實樹哥在朋友圈也看到過非常多的這樣的說法,不過具體的數值忘記了。我們可以通過這個案例來計算一下,每天進步一點點,一年後會有多大的差距?
  • 你確定你真的學了Python?
    很多朋友就會竊喜:「這不就是 Python 的 bug 嘛~」但實際上,這並不是 Python 中的 bug ,它和計算機硬體中如何處理浮點數有關。浮點數在計算機硬體中以二進位的形式存在,但是我們現在看到的都是十進位,而十進位的浮點數不能都完全精確的表示為二進位小數。就比如說我們在十進位數中無法用小數精確表示 1/3 一樣,在二進位數中也無法用小數精確表示 1/10。
  • EXCEL中處理小數點位數的函數們
    圖1中,我們知道15÷10的精確答案是1.5,若場合需要讓這個結果顯示為整數(即不保留小數點),我們可以「設置單元格格式」→「數值」→「小數位數」選0。EXCEL 2007以上的版本也可以如下圖操作,在表格上方的功能區「開始」→「數字」欄,直接點擊「減少小數位數」。
  • 60個Python實用小例子,建議收藏(文末送書)
    🚀本文推出60個Python實用小例子,建議收藏,方便後期學習和回顧用。將字符串str 當成有效的表達式來求值並返回計算結果取出字符串中內容In [1]: s = "1 + 3 +5" ...: eval(s) ...
  • 手把手教你進行 Java 的精確計算
    作為 Java 程式設計師在日常的工作中,很多時候我們都會遇到一些需要進行數據計算的場景,通常對於不需要計算精度的場景我們都可以使用 Integer,Float 或者 Double 來進行計算,雖然會丟失精度但是偶爾也可以用,如果我們需要精確計算結果的時候,就會用到 java.math 包中提供的 BigDecimal 類來實現對應的功能了。
  • 223個Python小例子(1-60)
    文末閱讀原文: 獲取2020年,最強Python學習資料Python小例子貢獻歡迎貢獻小例子到此庫小例子In [104]: print("i am {0},age{1}".format("tom",18))i am tom,age183.1415926{:.2f}3.14保留小數點後兩位3.1415926{:+.2f}+3.14帶符號保留小數點後兩位-1{:+.2f}-1.00帶符號保留小數點後兩位2.71828{:.0f}3不帶小數5{:0>2d}
  • 科技推動圓周率,如果π的數值精確了,又會導致怎麼樣的後果呢
    眾所周知,求一個未知圓的面積需要圓的半徑乘以一個叫做π的因子,這也是計算圓的周長、球的體積的一個重要因子,而在解析理論中,π可以近似為sin X=0時的最小正實數。但圓周率的具體數值直到古希臘哲學家阿基米德才正式計算出來。阿基米德從單位圓出發,圓內嵌正六邊形,圓周率的最小值是3,外切正六邊形,圓周率是4。繼續用內聯外切的正十二邊形再次查找PI得更精確的最大值和最小值,以此類推,直到使用正九十六邊形。最後,阿基米德推導出Pi的最大值為223/71,最小值為22/7。
  • Python 編寫程序實現將任意十進位正小數m轉換成n進位的正小數,小數點後保留10位小數
    Limits:1、0.0000009<m<12、1<n<10輸出:輸出10進位正小數m的n進位小數,結果保留10位小數。例如前面提到的可以通過decimal.getcontext().prec來設定小數點精度(默認為28)2、python中a,b=map(int,input().strip().split())作用是輸入兩個數,中間以空格隔開,分別賦值給a和b。