Ⅰ 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,则在小数点左侧进行四舍五入。