>> num_str = "123456.230" >>> "{-6ren">
gpt4 book ai didi

python - 字符串类型变量的自定义千位分隔符

转载 作者:行者123 更新时间:2023-11-28 21:07:28 28 4
gpt4 key购买 nike

我想使用千位分隔符格式化包含小数点和 float 的字符串。我试过:

"{:,}".format() 

但它不适用于字符串类型的参数!

>>> num_str = "123456.230"
>>> "{:,}".format(num_str)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: Cannot specify ',' with 's'.
>>>

用 Google 搜索解决方案,但找不到满足我需求的任何解决方案。

我的示例输入:"123456.0230"

我想要的示例输出是:"123,456.0230"

我自己写的代码如下:

input_str = ''
output_str = ''
lenth = 0

input_str = input("Input a number: ")

for i in input_str:
if input_str[lenth] == '.':
break
lenth += 1

if lenth % 3 == 0:
pos_separator = 3
else:
pos_separator = lenth % 3

for i in range(0, lenth):
if i == pos_separator:
output_str += ',' + input_str[i]
pos_separator += 3
else:
output_str += input_str[i]

output_str += input_str[lenth:]

print("Output String: ", output_str)

示例 1:

>>> Input a number: 123456.0230
>>> Output String: 123,456.0230

示例 2:

>>> Input a number: 12345.
>>> Output String: 12,345.

工作正常,但还有比这更好的方法吗?

最佳答案

可以将其设置为 float ,然后应用它:

>>> "{:,}".format(float(num_str))
'123,456.23'

>>> "{:,}".format(float(12345))
'12,345.0'

如果需要,您还可以使用 'g' 说明符删除尾随零:

>>> "{:,g}".format(float(12345))
'12,345'

正如@ user2357112 在评论中指出的那样,您最好可以导入 Decimal 并将其输入 .format 中:

>>> from decimal import Decimal
>>> "{:,}".format(Decimal(num_str))
'123,456.230'

因为你也有作为尾随点的案例,它需要被保留,并且因为我想不出 .format 可以自己做这个的方法,创建一个小函数,它将追加'.' 如果它存在,如果不存在则什么都不做:

def format_str(s):
fstr = "{:,}".format(Decimal(s))
return fstr + ('.' if s[-1] == '.' else '')

其中,对于一些测试用例:

for s in ['12345', '12345.', '1234.5']:
print(format_str(s))

产量:

12,345
12,345.
1,234.5

关于python - 字符串类型变量的自定义千位分隔符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41388404/

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