设置浮点数或数字的长度

时间:2017-03-09 15:01:03

标签: python-3.x

我一直在环顾四周尝试将浮点数或小数的长度设置为2个位置,我正在为一组课程工作做这个,我尝试了getcontext但它什么也没做。

from decimal import *
getcontext().prec = 2
price = ("22.5")
#I would like this to be 22.50, but as it comes form a list and I use float a bit, so I have to convert it to decimal (?)
price = Decimal(price)
print (price)

但输出是:

22.5

如果有人知道更好的方法将小数点的长度设置为2位小数(使用金钱)或者我出错了,那将会有所帮助。

2 个答案:

答案 0 :(得分:5)

“float”是“浮点”的缩写。阅读https://en.wikipedia.org/wiki/Floating-point_arithmetic上的浮点数,然后从不 永远 永远用它来代表金钱。

您与Decimal走在正确的轨道上。您只需要注意表示的精度与显示之间的区别。

上下文的prec属性控制由不同操作产生的值表示的精度。它控制显式构造值的精度。它不能控制显示器的精度。

考虑:

>>> getcontext().prec = 2
>>> Decimal("1") / Decimal("3")
Decimal('0.33')
>>> 

VS

>>> getcontext().prec = 2
>>> Decimal("1") / Decimal("2")
Decimal('0.5')
>>> 

VS

>>> getcontext().prec = 2
>>> Decimal("0.12345")
Decimal('0.12345')
>>> 

要指定Decimal的显示精度,您只需要对显示代码进行更多控制。不要依赖str(Decimal(...))

一个选项是规范化显示的小数:

>>> getcontext().prec = 2
>>> Decimal("0.12345").normalize()
Decimal('0.12')

这尊重上下文中的prec设置。

另一种选择是将其量化为特定的精度:

>>> Decimal("0.12345").quantize(Decimal("1.00"))
Decimal('0.12')

这与上下文中的prec设置无关。

小数也可以舍入:

>>> round(Decimal("123.4567"), 2)
123.46

虽然因为舍入的结果是 float 而要非常小心。

您也可以将Decimal直接格式化为字符串:

>>> "{:.2f}".format(Decimal("1.234"))
'1.23'

答案 1 :(得分:1)

试试这个:

print "{:.2f}".format(price)

这样就不需要全局设置精度。