python range 小数_python中如何表示一个无限循环小数?(不用分数的形式)python,使用range语...
python中如何表示一個無限循環(huán)小數(shù)?(不用分數(shù)的形式) python,使用range語
www.zhiqu.org ??? 時間: 2020-12-07
只能用分數(shù)
或者你自己設計一個對象,保留指定長度的有效位
range()只能產(chǎn)生int無法產(chǎn)生float
但是可以曲線救國
for i in range(0,10,1): print(i/10)運行結(jié)果:
0.0
0.1
0.2
0.3
0.4
0.5
0.6
0.7
0.8
0.9
Python里面小數(shù)點長度精度控制方法:
一、要求較小的精度
將精度高的浮點數(shù)轉(zhuǎn)換成精度低的浮點數(shù)。
1.round()內(nèi)置方法
這個是使用最多的,剛看了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()如果只有一個數(shù)作為參數(shù),不指定位數(shù)的時候,返回的是一個整數(shù),而且是最靠近的整數(shù)(這點上類似四舍五入)。但是當出現(xiàn).5的時候,兩邊的距離都一樣,round()取靠近的偶數(shù),這就是為什么round(2.5)
=
2。當指定取舍的小數(shù)點位數(shù)的時候,一般情況也是使用四舍五入的規(guī)則,但是碰到.5的這樣情況,如果要取舍的位數(shù)前的小樹是奇數(shù),則直接舍棄,如果偶數(shù)這向上取舍。看下面的示例:
>>> 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位小數(shù)的精度,但是這里有一個問題,就是當我們的計算需要使用更高的精度(超過17位小數(shù))的時候該怎么做呢?
1. 使用格式化(不推薦)
>>> a = "%.30f" % (1/3)
>>> a
'0.333333333333333314829616256247'
可以顯示,但是不準確,后面的數(shù)字往往沒有意義。
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位甚至更高,都可以。這樣在分析復雜的浮點數(shù)的時候,可以有更高的自己可以控制的精度。其實可以留意下context里面的這rounding=ROUND_HALF_EVEN
參數(shù)。ROUND_HALF_EVEN, 當half的時候,靠近even.
三、關于小數(shù)和取整
既然說到小數(shù),就必然要說到整數(shù)。一般取整會用到這些函數(shù):
1. round()
這個不說了,前面已經(jīng)講過了。一定要注意它不是簡單的四舍五入,而是ROUND_HALF_EVEN的策略。
2. math模塊的ceil(x)
取大于或者等于x的最小整數(shù)。
3. math模塊的floor(x)
去小于或者等于x的最大整數(shù)。
>>> 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
>>>
可以用假設法啊。這是計算機擅長的方法,用一個循環(huán)先假設循環(huán)節(jié)為1,然后依次假設2,3,4,5,6,7,8,9
不用再多了。再多也看不過來。這樣就可以輕松算出來了。
import sysx=0.12312312313tmps = "%s"%xp = tmps.find('.')if p<0: sys.exit()tmps = tmps[p+1:]for i in xrange(1,9): if tmps[:i]== tmps[i:i*2] and tmps[i:i*2]== tmps[i*2:i*3] : print 'result is %d'%i sys.exit()print 'not found'上面是一個簡單的例子。
f = lambda x, n: round(x, n - len(str(int(x))));
定義了一個方法f,用來實現(xiàn)你所說的功能。
輸入:
f(123.456789, 8)
輸出:
123.45678
輸入:
f(1.23456789, 8)
輸出:
1.2345679000000001
f接收2個參數(shù),第一個參數(shù)是要求有效位數(shù)的數(shù)字,第二個參數(shù)是設置有效位數(shù)。第二次輸出中的數(shù)字不夠準確,這跟python處理小數(shù)的方式有關,如果想要準確的數(shù)字可以使用python decimal類?;蛘哂胮ython3k
擴展資料
#include
#define C "C Programming"int main(void)
{
int a=12345;float b=5.12345678;
char e,d,f;
scanf("%c %c %c",&e,&d,&f);
printf("int is:%d
",a);
printf("float is:%f
",b);
printf("char is:%s
",C); return 0;
}
1,對于浮點數(shù)
a=1.36852
a=round(a,2)
print a
#結(jié)果1.36
2,對于整數(shù)
from decimal import Decimal
a=1
a=Decimal(a).quantize(Decimal('0.00'))
print a
#結(jié)果1.00
3,通用方法
a=1
a=("%.2f" % a)
print a
#結(jié)果1.00
參考資料:百度百科 Python
百度百科 printf
python中如何表示一個無限循環(huán)小數(shù)?(不用分數(shù)的形式)
: 只能用分數(shù)或者你自己設計一個對象,保留指定長度的有效位
用python怎么查找無限循環(huán)小數(shù)的循環(huán)節(jié)
: 可以用假設法啊.這是計算機擅長的方法,用一個循環(huán)先假設循環(huán)節(jié)為1,然后依次假設2,3,4,5,6,7,8,9不用再多了.再多也看不過來.這樣就可以輕松算出來了.import sysx=0.12312312313tmps = "%s"%xp = tmps.find('.')if p<0: sys.exit()tmps = tmps[p+1:]for i in xrange(1,9): if tmps[:i]== tmps[i:i*2] and tmps[i:i*2]== tmps[i*2:i*3] : print 'result is %d'%i sys.exit()print 'not found'上面是一個簡單的例子.
怎樣把一個無限循環(huán)小數(shù)表示為原來的分數(shù)形式我要的是具體過程~不然俺看不懂啊~_作業(yè)幫
: 很簡單啦比如任何一個小數(shù)如1.25612561256先找到循環(huán)體就是1256如果小數(shù)前面的數(shù)也是循環(huán)體的一部分那么就把它變成0.125612561256(除以10倍)如果循環(huán)體前面還有數(shù)那么就變成一個數(shù)加上一個循環(huán)小數(shù)比如0.833333就...
python 如何在循環(huán)的時候設置range()為小數(shù)_
: a = [i/100.0 for i in range(10, 50)] 用numpy也可以 numpy.arange(0.1, 0.5, 0.01) 也可以參考下這個 http://stackoverflow.com/questions/477486/python-decimal-range-step-value
用python證明循環(huán)小數(shù)0.99=1,請附代碼,謝謝!_
: Python 3.5.2 (v3.5.2:4def2a2901a5, Jun 25 2016, 22:01:18) [MSC v.1900 32 bit (Intel)] on win32Type "help", "copyright", "credits" or "license" for more information.>>> 0.999999999999999999999999999999999999 == 1True>>> 0.99 == 1False
循環(huán)小數(shù)怎么表示_
: 一、循環(huán)節(jié)表示 循環(huán)節(jié)的表示方法.找到小數(shù)部分的循環(huán)小數(shù),如果它是一個數(shù)字循環(huán),就在這個數(shù)字的上面點一個點;如果2個數(shù)字循環(huán),就在這兩個數(shù)字上面分別點一個點;如果出現(xiàn)2個以上數(shù)字的,就在第一個數(shù)字和最后一個數(shù)字的上面...
python如何跳出無限循環(huán)并執(zhí)行下一個函數(shù)_
: while true: 你的函數(shù)記得自己加退出條件
一個無限循環(huán)小數(shù)被一個數(shù)除,結(jié)果是整數(shù),不用計算機怎么算?_
: 無限循環(huán)小數(shù)可以轉(zhuǎn)化為分數(shù),轉(zhuǎn)化為分數(shù)就可以算了
82.6666666666不用分數(shù)表示怎么寫?_
: 6是無限循環(huán)么?那么寫成 82.6 ,在6上面點一個點表明是6的無限循環(huán)
無限循環(huán)小數(shù)一定可化為分數(shù)嗎?能證明嗎?無限不循環(huán)小數(shù)呢?
: 實數(shù)分為有理數(shù)和無理數(shù)有理數(shù)包括整數(shù)和分數(shù),此分數(shù)亦可表示為有限小數(shù)或無限循環(huán)小數(shù).任何一個有理數(shù)都可以寫成分數(shù)m/n(m,n都是整數(shù),且n≠0)的形式.無理數(shù)是實數(shù)中不能精確地表示為兩個整數(shù)之比的數(shù),即無限不循環(huán)小數(shù).根據(jù)定義就能判定分數(shù)一定不能化成無限不循環(huán)小數(shù).圓的直徑/周長=π,π是無限不循環(huán)小數(shù),但是這里圓的直徑和周長肯定不同時是整數(shù)!
總結(jié)
以上是生活随笔為你收集整理的python range 小数_python中如何表示一个无限循环小数?(不用分数的形式)python,使用range语...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: DL-tudo
- 下一篇: permutohedral lattic