最近遇到乙個神奇的問題:
>>> round(0.215,2)0.21
>>>
而我想要的結果是0.22,這個應該是二進位制儲存的原因。那麼如何避免呢?
找了半天找到乙個辦法,貼在此處記錄下:
importdecimal
>>> aa = decimal.decimal('
0.215')
>>> aa.quantize(decimal.decimal('
1.00'))
decimal(
'0.22')
>>>
貌似好點了,繼續實驗下:
>>> from decimal importdecimal
>>> decimal('
0.125
').quantize(decimal('
1.00'))
decimal(
'0.12')
>>> decimal('
0.375
').quantize(decimal('
1.00'))
decimal(
'0.38
')
又有點兒意外了,原來quantize還有乙個引數rounding,表示進製方式,預設值為round_half_even,此時精確小數點是如果遇到5,會是遵循前一位數字的奇進偶舍,
奇進偶舍簡單解釋:那麼我們需要在quantize中指定進製方式為round_half_up例如對於乙個小數
a.bcd
,需要精確到小數點後兩位,那麼就要看小數點後第三位:如果
d
小於 5,直接捨去如果
d
大於 5,直接進製如果
d
等於 5:d
後面沒有資料,且 c 為偶數
,那麼不進製,保留 c
d
後面沒有資料,且 c 為奇數
,那麼進製,c 變成(c + 1)如果
d
後面還有非 0 數字,例如實際上小數為a.bcdef
,此時一定要進製,c 變成(c + 1)
from decimal import *>>> decimal('
0.125
').quantize(decimal('
1.00
'), rounding=round_half_up)
decimal(
'0.13')
>>> decimal('
0.385
').quantize(decimal('
1.00
'), rounding=round_half_up)
decimal(
'0.39')
>>>
參考:
靠譜的數字
數字從1開始,遇到數字7就會跳過,比如6後邊直接是8,69後邊直接是80,現在給你個數字,問是第幾位?見文末 比如輸入8,輸出7,就是第7個數。87 用時 0天0小時0分鐘0秒1毫秒 8870 用時 0天0小時0分鐘0秒2毫秒 888637 用時 0天0小時0分鐘0秒3毫秒 8888 5740 用時...
Python保留小數的方法
因總是忘記保留小數的方法,故在此做個總結。方法一 字串格式化 print 2f 1.255 1.25方法二 format函式方法 format函式有兩種寫法 1 使用佔位符 需注意佔位符和冒號不能丟 此方法可以一次輸出多個 print format 1.256,1.2635 1.26,1.2642 ...
看書學python靠譜嗎 自學Python靠譜嗎?
自學python首先要比培訓班學習來得經濟又實惠,需要的是充足的時間,一般培訓機構費用都是一萬多的學費,自學python可以說是0費用就能入門。自學python可以分為以下三個階段 第一 基礎語法學習。python的基礎語法包括兩大部分,其一是函式式程式設計部分,其二是物件導向程式設計部分。函式式部...