【问题标题】:Python 3.5.0 decimal [duplicate]Python 3.5.0十进制[重复]
【发布时间】:2016-02-01 01:36:34
【问题描述】:

所以我需要在输出中去掉一些小数点。

我有以下行:

print ("O valor a pagar é de ", ***float(n3)*1.3***, " euros.")

在我突出显示的区域中,我遇到了很多情况...例如,输出是这样的:2,47893698236923,我希望它只显示 2 个小数情况,例如:2,47

我该怎么做?我正在使用 python 3.5.0

【问题讨论】:

  • @OP : 注意,输出是小数点 point 没有 coma (除非您使用语言环境标准模块)。

标签: python python-3.x decimal


【解决方案1】:

正如 BlivetWidget 所指出的,浮动格式会导致舍入不截断。

您可以使用 Decimal 模块:

from decimal import Decimal, ROUND_DOWN

x = 2.47893698236923
print(Decimal(str(x)).quantize(Decimal('.01'), rounding=ROUND_DOWN))
print(Decimal(str(x)).quantize(Decimal('.001'), rounding=ROUND_DOWN))

输出:

2.47
2.478

编辑 正如Python docs 解释的那样:

quantize() 方法将数字四舍五入为固定指数。这种方法 对于经常将结果四舍五入的货币应用程序很有用 固定数量的地方

编辑 2

另见Truncating floats in Python

【讨论】:

  • 这在我的 python 模块中不起作用... Traceback(最近一次调用最后):文件“C:\Users\Acer\Pictures\Ines\python\exerciocio 1.py”,第 36 行, in print ("O valor a pagar é de ", Decimal(str(float(n3)*1.3).quatize('.01'), rounding=ROUND_DOWN), " euros.") AttributeError: 'str ' 对象没有属性 'quatize'
  • @Ines:你拼错了quantize
【解决方案2】:

使用round() 函数。

print("O valor a pagar é de ", round(float(n3) * 1.3, 2), " euros.")

【讨论】:

  • 这有帮助。谢谢
【解决方案3】:

根据您提供的示例,您希望截断一个值(此时其他答案将舍入该值)。如果你只想截断,我会使用字符串切片。

>>> num = 2.47893698236923
>>> str(num)[:str(num).find('.') + 3]
'2.47'

PS:如果你不知道里面是否有小数,你可以使用这个变体:

>>> numstr = str(num)
>>> numstr[:(numstr.find('.') + 3) if numstr.find('.') else None]
'2.47'

【讨论】:

  • 反对这个答案的人能否解释为什么这个答案没有用,特别是考虑到它是唯一给出 OP 要求的输出的答案?
  • 我没有对您的帖子投反对票。但是,Op 不需要舍入,因为舍入 2.47893698236923 -> 2.48。编辑你是对的,.2f 是舍入而不是修剪,我不知道这一点。
  • @P.Ortiz 这就是我的观点,所有其他答案都围绕该值(尝试其中的一两个),而我根据要求截断了该值。 (PS四舍五入2.47893698236923到小数点后两位其实是2.48)
猜你喜欢
  • 2014-02-19
  • 2013-06-13
  • 2020-01-21
  • 2013-09-23
  • 1970-01-01
  • 2010-10-10
  • 2017-09-28
  • 2017-12-30
  • 1970-01-01
相关资源
最近更新 更多