gpt4 book ai didi

python - 可以使用格式对整数进行四舍五入吗?

转载 作者:太空宇宙 更新时间:2023-11-04 09:06:50 26 4
gpt4 key购买 nike

我正在尝试取一个大整数,即:123123123 并使用 3 位精度和逗号对其进行格式化。格式可以添加逗号使用:

'{:,}'.format(123123123)  # '123,123,123'

并指定浮点精度:

'{0:.2f}'.format(3.141592) # '3.14'

但是如果我想两者都做呢?

即:

'{:,3d}'.format(123123123)  # ValueError

我想让它返回:123,000,000

最佳答案

没有办法直接做到这一点。 Python 整数的全部意义在于它们是无限精度的;如果你想舍入它们,你必须明确地做。事实上,当您尝试显而易见的事情时,异常中的消息会告诉您:

>>> '{:,.3d}'.format(123123123)
ValueError: Precision not allowed in integer format specifier

所以,您的尝试是正确的……但它不仅仅是有点古怪:

'{:,.0f}'.format(round(123123123,-6))

没有理由明确地将 int 强制为 float 只是为了打印时不带任何小数值。让它保持一个int:

'{:,}'.format(round(123123123, -6))

除了更简单之外,这还意味着当你有一天尝试打印一个巨大的整数时,它不会给你一个OverflowError 或丢失比你想要的更多的数字......

在早期版本的 Python(即 2.x)中,round 总是返回 float 无论你给它什么类型,你不能这样做;您可能希望编写一个简单的 intround 函数。例如:

def intround(number, ndigits):
return (number + 5 * 10**(-ndigits-1)) // 10**-ndigits * 10**-ndigits

如果您知道一个事实,即您永远不会有一个太大而无法无损地放入float 中的整数,您可以只使用int(round(*args)) 相反——但实际上,如果你能避免将整数转换为 float ,你应该这样做。

而且,虽然我们正在做这件事,但没有理由构建一个 {} 字符串来调用 format 方法,您只需调用自由函数:

format(round(123123123, -6), ',')

关于python - 可以使用格式对整数进行四舍五入吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19826142/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com