python中如何表示一个无限循环小数?(不用分数的形式) python,使用range语
www.zhiqu.org 时间: 2020-12-07
只能用分数
或者你自己设计一个对象,保留指定长度的有效位
range()只能产生int无法产生float
但是可以曲线救国
for i in range(0,10,1): print(i/10)运行结果:
0.0
0.1
0.2
0.3
0.4
0.5
0.6
0.7
0.8
0.9
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.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
>>>
可以用假设法啊。这是计算机擅长的方法,用一个循环先假设循环节为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,用来实现你所说的功能。
输入:
f(123.456789, 8)
输出:
123.45678
输入:
f(1.23456789, 8)
输出:
1.2345679000000001
f接收2个参数,第一个参数是要求有效位数的数字,第二个参数是设置有效位数。第二次输出中的数字不够准确,这跟python处理小数的方式有关,如果想要准确的数字可以使用python decimal类。或者用python3k
扩展资料
#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,对于浮点数
a=1.36852
a=round(a,2)
print a
#结果1.36
2,对于整数
from decimal import Decimal
a=1
a=Decimal(a).quantize(Decimal('0.00'))
print a
#结果1.00
3,通用方法
a=1
a=("%.2f" % a)
print a
#结果1.00
参考资料:百度百科 Python
百度百科 printf
python中如何表示一个无限循环小数?(不用分数的形式)
: 只能用分数或者你自己设计一个对象,保留指定长度的有效位
用python怎么查找无限循环小数的循环节
: 可以用假设法啊.这是计算机擅长的方法,用一个循环先假设循环节为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'上面是一个简单的例子.
怎样把一个无限循环小数表示为原来的分数形式我要的是具体过程~不然俺看不懂啊~_作业帮
: 很简单啦比如任何一个小数如1.25612561256先找到循环体就是1256如果小数前面的数也是循环体的一部分那么就把它变成0.125612561256(除以10倍)如果循环体前面还有数那么就变成一个数加上一个循环小数比如0.833333就...
python 如何在循环的时候设置range()为小数_
: 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证明循环小数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
循环小数怎么表示_
: 一、循环节表示 循环节的表示方法.找到小数部分的循环小数,如果它是一个数字循环,就在这个数字的上面点一个点;如果2个数字循环,就在这两个数字上面分别点一个点;如果出现2个以上数字的,就在第一个数字和最后一个数字的上面...
python如何跳出无限循环并执行下一个函数_
: while true: 你的函数记得自己加退出条件
一个无限循环小数被一个数除,结果是整数,不用计算机怎么算?_
: 无限循环小数可以转化为分数,转化为分数就可以算了
82.6666666666不用分数表示怎么写?_
: 6是无限循环么?那么写成 82.6 ,在6上面点一个点表明是6的无限循环
无限循环小数一定可化为分数吗?能证明吗?无限不循环小数呢?
: 实数分为有理数和无理数有理数包括整数和分数,此分数亦可表示为有限小数或无限循环小数.任何一个有理数都可以写成分数m/n(m,n都是整数,且n≠0)的形式.无理数是实数中不能精确地表示为两个整数之比的数,即无限不循环小数.根据定义就能判定分数一定不能化成无限不循环小数.圆的直径/周长=π,π是无限不循环小数,但是这里圆的直径和周长肯定不同时是整数!