【问题标题】:How to truncate numbers? [duplicate]如何截断数字? [复制]
【发布时间】:2015-11-11 03:24:13
【问题描述】:

我有数字,例如:

100.1264
9.09
123
1298.456789

我想将其截断为:

100.12
9.09
123
1298.45

如何截断这些数字以保留它们的形式?

【问题讨论】:

  • 你是什么意思“数字”?它们是字符串的一部分,还是数字对象的一部分?您希望它们显示 到 2dp,还是实际四舍五入?到目前为止,尝试了什么?请提供更多信息。
  • nips 你有什么尝试吗?向我们展示你尝试过的 Python 代码。
  • 请参考这个答案,这可能会对您有所帮助。 here

标签: python


【解决方案1】:
s="""100.1264
9.09
123
343.1
1298.456789"""
print re.sub(r"(?<=\.)(\d{2})\d+",r"\1",s)

如果您的输入是浮点数,您可以使用

s=100.1264

print ast.literal_eval(re.sub(r"(?<=\.)(\d{2})\d+",r"\1",str(s)))

【讨论】:

  • 转换为字符串,对其进行正则表达式并转换回来(使用literal_eval,而不是float?!)与例如相比似乎效率低下。 int(s * 100) / 100.0...
  • @jonrsharpe round(4.1234) 给出4.0 ?
  • 是的,我在评论后不久就意识到了这一点。正如其他地方指出的那样,math.trunc 也可用,关键是通过字符串的往返似乎是一种奇怪的处理方式。
  • @jonrsharpe 我不知道math.trunk
【解决方案2】:

如果你有数字(不是字符串),你可以使用:

import math
math.trunc(x * 100) / 100

例如:

>>> import math
>>> x = 100.1264
>>> math.trunc(x * 100) / 100
100.12

您也可以使用int 代替math.trunc,但请注意浮点数和整数之间的转换可能会耗费大量计算资源。

额外提示:如果您想要任意精度的十进制运算,请查看decimal module

【讨论】:

    猜你喜欢
    • 2021-03-31
    • 2018-01-17
    • 2019-12-19
    • 2017-03-18
    • 1970-01-01
    • 1970-01-01
    • 2017-02-18
    • 1970-01-01
    • 2020-08-28
    相关资源
    最近更新 更多