如何截断数字? [复制]

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? [复制]

如何将任何空格截断为一个空格? [复制]

如何截断火花数据框列的值? [复制]

如何在 React/CSS 或 Material UI 中按行高的倍数截断文本? [复制]

如何限制输出的最大字符数? [复制]

如何使用 EntityFramework 4.1 CodeFirst 防止十进制值在保存时被截断为 2 位? [复制]