Ⅰ python 如何控制輸出的小數長度
Python裡面小數點長度精度控制方法:
一、要求較小的精度
將精度高的浮點數轉換成精度低的浮點數。
1.round()內置方法
這個是使用最多的,剛看了round()的使用解釋,也不是很容易懂。round()不是簡單的四捨五入的處理方式。
For the built-in types supporting round(), values are rounded to the
closest multiple of 10 to the power minus ndigits; if two multiples are equally
close, rounding is done toward the even choice (so, for example, both round(0.5)
and round(-0.5) are 0, and round(1.5) is 2).
>>> round(2.5)
2
>>> round(1.5)
2
>>> round(2.675)
3
>>> round(2.675, 2)
2.67
round()如果只有一個數作為參數,不指定位數的時候,返回的是一個整數,而且是最靠近的整數(這點上類似四捨五入)。但是當出現.5的時候,兩邊的距離都一樣,round()取靠近的偶數,這就是為什麼round(2.5)
=
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.'
可以顯示,但是不準確,後面的數字往往沒有意義。
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.')
>>> c = Decimal(1)/Decimal(17)
>>> c
Decimal('0.')
>>> 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
>>>
Ⅱ 當使用print語句輸出時,Python將所有浮 點數字格式化為小數點後兩位。對嗎
不會的,要配合format格式化輸出。
x = 10/3
print(x)
print('{:.2f}'.format(x))
Ⅲ python 輸入正整數pqn,計算p/q的值,精確到小數位n位,控制n使得p/q的值可以達
def test(p, q, n):
return('{a:.{b}f}'.format(a = p/q, b = n))
Ⅳ python怎麼控制小數點位數比如float類型a=1.23456789,我想把a轉化為a=1.2345的形式,這個怎麼轉化呀
可以使用decimal模塊,decimal意思為十進制,這個模塊提供了十進制浮點運算支持。
常用方法
1.可以傳遞給Decimal整型或者字元串參數,但不能是浮點數據,因為浮點數據本身就不準確。
2.要從浮點數據轉換為Decimal類型
from decimal import *
Decimal.from_float(12.222)
# 結果為Decimal('12.')
3.通過設定有效數字,限定結果樣式:
from decimal import *
getcontext().prec=6
Decimal(1)/Decimal(7)
# 結果為Decimal('0.142857'),六個有效數字
4.四捨五入,保留幾位小數
from decimal import *
Decimal('50.5679').quantize(Decimal('0.00'))
# 結果為Decimal('50.57'),結果四捨五入保留了兩位小數
5.Decimal 結果轉化為string
from decimal import *
str(Decimal('3.40').quantize(Decimal('0.0')))
# 結果為'3.40',字元串類型
Python提供了decimal模塊用於十進制數學計算,它具有以下特點:
提供十進制數據類型,並且存儲為十進制數序列;
有界精度:用於存儲數字的位數是固定的,可以通過decimal.getcontext().prec=x 來設定,不同的數字可以有不同的精度
浮點:十進制小數點的位置不固定(但位數是固定的)
Python-網路
Ⅳ 用Python編寫一個,輸入一個四位整數,求它的千位,百位,十位,個位各是多少
#!/usr/bin/env python
# -*- coding: utf-8 -*-
a = input()
print "千位是: %s" % str(a)[0]
print "百位是: %s" % str(a)[1]
print "十位是: %s" % str(a)[2]
print "個位是: %s" % str(a)[3]
當運行程序時,在控制台輸入2345,輸出結果是:
千位是: 2
千位是: 3
千位是: 4
千位是: 5
(5)python位數控制擴展閱讀
1、python輸入用法介紹:
python輸入時使用input( )函數,這個函數只能接收「數字」的輸入,返回所輸入的數字的類型( int, float )。示例:
a = input("input a: ")
print(a,type(a))
2、python字元串切割:
python中string字元串使用[]可以通過索引獲取字元串中字元,例如:
a = "Hello"
print "a[1] 輸出結果:", a[1]
a[1] 輸出結果: e
Ⅵ python中round函數的用法
round函數python:
這個函數相當於調去裡面的一個函數,有一個數組,從中裡面調取一個數據。簡單的說,round是使用四捨五入對小數進行位數控制的函數,round(a,b),a參數是小數,b是小數點後保留的位數。實際使用需要考慮的python2和python3版本的差異與小數精度的問題。
ound函數的使用用法
根據Excel的幫助得知,round函數就是返回一個數值,該數值是按照指定的小數位數進行四捨五入運算的結果。
round函數的語法是:ROUND(number,num_digits),即:Round(數值,保留的小數位數)
Number:需要進行四捨五入的數字。
Num_digits:指定的位數,按此位數進行四捨五入。
其中,如果num_digits大於0,則四捨五入到指定的小數位。
如果num_digits等於0,則四捨五入到最接近的整數。
如果num_digits小於0,則在小數點左側進行四捨五入。