如何截断数字? [复制]
Posted
技术标签:
【中文标题】如何截断数字? [复制]【英文标题】: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 【参考方案1】:s="""100.1264
9.09
123
343.1
1298.456789"""
print re.sub(r"(?<=\.)(\d2)\d+",r"\1",s)
如果您的输入是浮点数,您可以使用
s=100.1264
print ast.literal_eval(re.sub(r"(?<=\.)(\d2)\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。
【讨论】:
以上是关于如何截断数字? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
如何在AngularJS中截断messageText? [复制]