您的位置:首页 > 编程语言 > Python开发

python中保留两位小数

2013-12-27 11:53 375 查看
今天写程序的时候碰到了一个问题关于如何控制浮点数只显示小数点后两位,正常的想法是用round函数,例如
round(a, 2),但是在面对下面的问题时候round就不太好用了
>>> a=13.949999999999999>>> round(a, 2)13.949999999999999上网查了资料,有网友提供了一种方法
>>> print "%.2f" % a
13.95
还可以使用decimal
decimal.Decimal类型是Python中满足高精度计算的一种数据类型,使用进需要导入decimal包定义Decimal数据类型:1 无法使用赋字面值的方式定义2 定义方式如下:>>> import decimal>>> x = decimal.Decimal(87345)>>> xDecimal('87345')>>> x = decimal.Decimal('123.3344332566334')>>> xDecimal('123.3344332566334')可以传递给Decimal整型或者字符串参数,但不能是浮点数据,因为浮点数据本身就不准确如果需要从浮点数据转换为Decimal类型,可能使用如下方法>>> x = decimal.Decimal.from_float(127.3323)>>> xDecimal('127.332300000000003592504072003066539764404296875')适用于整型操作同样适用于Decimal类型
I have 3 questions pertaining to decimal arithmetic in Python, all 3 of which are best asked inline:

1)

[code]>>> from decimal import getcontext, Decimal>>> getcontext().prec = 6>>> Decimal('50.567898491579878') * 1Decimal('50.5679')>>> # How is this a precision of 6? If the decimal counts whole numbers as>>> # part of the precision, is that actually still precision?>>>
and

2)

>>> from decimal import getcontext, Decimal>>> getcontext().prec = 6>>> Decimal('50.567898491579878')Decimal('50.567898491579878')>>> # Shouldn't that have been rounded to 6 digits on instantiation?>>> Decimal('50.567898491579878') * 1Decimal('50.5679')>>> # Instead, it only follows my precision setting set when operated on.>>> 

3)

>>> # Now I want to save the value to my database as a "total" with 2 places.>>> from decimal import Decimal>>> # Is the following the correct way to get the value into 2 decimal places,>>> # or is there a "better" way?>>> x = Decimal('50.5679').quantize(Decimal('0.00'))>>> x  # Just wanted to see what the value wasDecimal('50.57')>>> foo_save_value_to_db(x)>>> 
本机测试用例:
>>> import decimal>>> x = decimal.Decimal(87345)>>> xDecimal('87345')>>> print x87345>>> from decimal import getcontext, Decimal>>> x = Decimal('0.998531571219').quantize(Decimal('0.00'))>>> xDecimal('1.00')>>> print x1.00>>> x = Decimal('0.998531571219').quantize(Decimal('0.0000'))>>> xDecimal('0.9985')>>> print x0.9985>>> y = Decimal.from_float(0.998531571219)>>> yDecimal('0.99853157121900004700165709436987526714801788330078125')>>> y = Decimal.from_float(0.998531571219).quantize(Decimal('0.0000'))>>> yDecimal('0.9985')>>> print y0.9985>>> f1 = 0.998531571219>>> f10.998531571219>>> type(f1)<type 'float'>>>> f2 = str(f1)>>> f2'0.998531571219'>>> type(f2)<type 'str'>>>> 

                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: