为字符串类型变量定制千分隔符
问题描述:
我想要使用千位分隔符来格式化包含小数点和浮点数的字符串。我试过了:为字符串类型变量定制千分隔符
但它不能使用字符串类型的参数!
>>> num_str = "123456.230"
>>> "{:,}".format(num_str)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: Cannot specify ',' with 's'.
>>>
谷歌搜索解决方案,但找不到任何满足我的需求的解决方案。
我的样本输入:"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)
SAMPE 1:
>>> Input a number: 123456.0230
>>> Output String: 123,456.0230
样品2:
>>> Input a number: 12345.
>>> Output String: 12,345.
工作还行,但有没有其他方式比这更好?
答
您可以只是让一个浮子和然后应用它:
>>> "{:,}".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
你也可以叫'decimal.Decimal',而不是'float',以避免四舍五入,准确地保留尾随零。 – user2357112
@ Jim和&user2357112:谢谢各位!除案件外很好:>>> num_str =“123456.” >>> {:,}“。格式(十进制(num_str))>>>'123,456'(它应该是没有点返回) 但我目前正在使用GUI/PyQt5计算器项目需要提到的情况下通过keyPressEvent()显示用户输入,我想除了定制的方式来满足这个需求没有别的办法,如果还有其他方法,请让我知道。 – smearumi
@smearumi你可以创建一个更短的定制版本,看看我更新的答案,看看它是否有诀窍。 –