python range 小数_python中如何表示一个无限循环小数?(不用分数的形式)python,使用range语...

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)的形式.无理数是实数中不能精确地表示为两个整数之比的数,即无限不循环小数.根据定义就能判定分数一定不能化成无限不循环小数.圆的直径/周长=π,π是无限不循环小数,但是这里圆的直径和周长肯定不同时是整数!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值